1.需求概述
Java8中提供了新的日期时间类,帮助我们更便捷的操作日期和时间对象。
针对原来的Date类,如何在新的日期时间对象与Date类之间相互转化,本文做出详细的总结。
2.Java8中的Date与各类之间的关系
各个类的功能说明如下 :
LocalDate : Java8 日期类(默认时区,中国就是东八区)
LocalTime : Java8 时间类(默认时区,中国就是东八区)
LocalDateTime : Java8 日期时间类(默认时区,中国就是东八区)
Instant : Java8 时间戳类
ZoneDateTime : Java8 带时区的日期时间类
Date : Java中的Date类,包 java.util.Date
关键的转换思路,可以根据下面的图进行理解:
3.具体的转换关系
下面的各个转换思路直接看代码,(结合上面的图更好理解)
3.1 LocalDate 转 Date
package com.northcastle.K_Date;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;
public class LocalDateTimeAndDate {
public static void main(String[] args) {
//0.准备一个Date的格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 1.LocalDate 转 Date
* 思路1 : LocalDate --> LocalDateTime --> Instant --> Date
* 思路2 : LocalDate --> LocalDateTime --> ZoneDateTime --> Instant --> Date
*/
LocalDate localDate01 = LocalDate.of(2022, 3, 25);
LocalDateTime localDateTime01 = localDate01.atStartOfDay(); // 将 时分秒 设置为0
// 思路一 :
Instant instant0101 = localDateTime01.toInstant(ZoneOffset.of("+8")); //【这也是一种转换 Instant 的方法】
Date date0101 = Date.from(instant0101);
//思路二 :
ZonedDateTime zonedDateTime01 = localDateTime01.atZone(ZoneId.systemDefault());
Instant instant0102 = zonedDateTime01.toInstant();
Date date0102 = Date.from(instant0102);
System.out.println("localDate01 = " + localDate01);
System.out.println("localDateTime01 = " + localDateTime01);
System.out.println("zonedDateTime01 = " + zonedDateTime01);
System.out.println("instant0101 = " + instant0101);
System.out.println("date0101 = " + sdf.format(date0101));
System.out.println("instant0102 = " + instant0102);
System.out.println("date0102 = " + sdf.format(date0102));
System.out.println("=======================");
}
}
3.2 LocalDateTime 转 Date
package com.northcastle.K_Date;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;
public class LocalDateTimeAndDate {
public static void main(String[] args) {
//0.准备一个Date的格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 2.LocalDateTime 转 Date
* 思路1 : LocalDateTime --> Instant --> Date
* 思路2 : LocalDateTime --> ZoneDateTime --> Instant --> Date
*/
LocalDateTime localDateTime02 = LocalDateTime.of(2022, 3, 25, 22, 34, 30);
// 思路一 :
Instant instant0201 = localDateTime02.toInstant(ZoneOffset.of("+8"));
Date date0201 = Date.from(instant0201);
// 思路二 :
ZonedDateTime zonedDateTime02 = localDateTime02.atZone(ZoneId.systemDefault());
Instant instant0202 = zonedDateTime02.toInstant();
Date date0202 = Date.from(instant0202);
System.out.println("localDateTime02 = " + localDateTime02);
System.out.println("zonedDateTime02 = " + zonedDateTime02);
System.out.println("instant0201 = " + instant0201);
System.out.println("date0201 = " + sdf.format(date0201));
System.out.println("instant0202 = " + instant0202);
System.out.println("date0202 = " + sdf.format(date0202));
System.out.println("=======================");
}
}
3.3 ZoneDateTime 转 Date
package com.northcastle.K_Date;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;
public class LocalDateTimeAndDate {
public static void main(String[] args) {
//0.准备一个Date的格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 3.ZoneDateTime 转 Date
* 思路 : ZoneDateTime --> Instant --> Date
*/
ZonedDateTime zonedDateTime03 = ZonedDateTime.of(2022, 3, 25, 22, 36, 56, 0, ZoneId.systemDefault());
Instant instant03 = zonedDateTime03.toInstant();
Date date03 = Date.from(instant03);
System.out.println("zonedDateTime03 = " + zonedDateTime03);
System.out.println("instant03 = " + instant03);
System.out.println("date03 = " + sdf.format(date03));
System.out.println("=======================");
}
}
3.4 Date 转 ZoneDateTime
package com.northcastle.K_Date;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;
public class LocalDateTimeAndDate {
public static void main(String[] args) {
//0.准备一个Date的格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 4.Date 转 ZoneDateTime
* 思路 : Date --> Instant --> ZoneDateTime
*/
Date date04 = new Date();
Instant instant04 = date04.toInstant();
ZonedDateTime zonedDateTime04 = ZonedDateTime.ofInstant(instant04, ZoneId.systemDefault());
System.out.println("date04 = " + sdf.format(date04));
System.out.println("instant04 = " + instant04);
System.out.println("zonedDateTime04 = " + zonedDateTime04);
System.out.println("=======================");
}
}
3.5 Date 转 LocalDateTime
package com.northcastle.K_Date;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;
public class LocalDateTimeAndDate {
public static void main(String[] args) {
//0.准备一个Date的格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 5.Date 转 LocalDateTime
* 思路1 : Date --> Instant --> ZoneDateTime --> LocalDateTime
* 思路2 : Date --> Instant --> LocalDateTime.of(Instant,ZoneId)
*/
Date date05 = new Date();
Instant instant05 = date05.toInstant();
//思路一 : Date --> Instant --> ZoneDateTime --> LocalDateTime
LocalDateTime localDateTime0501 = ZonedDateTime.ofInstant(instant05, ZoneId.systemDefault()).toLocalDateTime();
//思路二 : Date --> Instant --> LocalDateTime.of(Instant,ZoneId)
LocalDateTime localDateTime0502 = LocalDateTime.ofInstant(instant05, ZoneId.systemDefault());
System.out.println("date05 = " + sdf.format(date05));
System.out.println("instant05 = " + instant05);
System.out.println("localDateTime0501 = " + localDateTime0501);
System.out.println("localDateTime0502 = " + localDateTime0502);
System.out.println("=======================");
}
}
3.6 Date 转 LocalDate
package com.northcastle.K_Date;
import java.text.SimpleDateFormat;
import java.time.*;
import java.util.Date;
public class LocalDateTimeAndDate {
public static void main(String[] args) {
//0.准备一个Date的格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 6.Date 转 LocalDate
* 思路1 : Date --> Instant --> ZoneDateTime --> LocalDateTime --> LocalDate
* 思路2 : Date --> Instant --> LocalDateTime.of(Instant,ZoneId) --> LocalDate
*/
Date date06 = new Date();
Instant instant06 = date06.toInstant();
//思路一 : Date --> Instant --> ZoneDateTime --> LocalDateTime --> LocalDate
LocalDate localDate0601 = ZonedDateTime.ofInstant(instant06, ZoneId.systemDefault()).toLocalDateTime().toLocalDate();
//思路二 : Date --> Instant --> LocalDateTime.of(Instant,ZoneId) --> LocalDate
LocalDate localDate0602 = LocalDateTime.ofInstant(instant06, ZoneId.systemDefault()).toLocalDate();
System.out.println("date06 = " + sdf.format(date06));
System.out.println("instant06 = " + instant06);
System.out.println("localDate0601 = " + localDate0601);
System.out.println("localDate0602 = " + localDate0602);
System.out.println("=======================");
}
}
4.完成
Congratulations!
You are one step closer to success!