LocalDateTime、LocalDate、Date的相互轉換
LocalDateTime 及 LocalDate 是 Java8 的新特性,有時為了兼容 Date 類型需要進行轉換。
LocalDateTime 轉 LocalDate
直接調用 toLocalDate() 方法
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();
LocalDateTime 轉 Date
在LocalDateTime 轉 Date 時,需要使用到 Java 8的幾個類
- ZoneId/ZoneOffset:表示時區
- ZonedDateTime: 表示特定時區的日期和時間
- Instant:表示時刻,不直接對應年月日信息,需要通過時區轉換
LocalDateTime localDateTime = LocalDateTime.now();
//獲取系統默認時區
ZoneId zoneId = ZoneId.systemDefault();
//時區的日期和時間
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
//獲取時刻
Date date = Date.from(zonedDateTime.toInstant());
System.out.println("格式化前:localDateTime:" + localDateTime + " Date:" + date);
//格式化LocalDateTime、Date
DateTimeFormatter localDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("格式化后:localDateTime:" + localDateTimeFormat.format(localDateTime) + " Date:" + dateFormat.format(date));
輸出結果如下:
格式化前:localDateTime:2020-10-27T11:35:09.969 Date:Tue Oct 27 11:35:09 CST 2020
格式化后:localDateTime:2020-10-27 11:35:09 Date:2020-10-27 11:35:09
LocalDate 轉 LocalDateTime
一般調用 atTime() 方法進行賦值
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime1 = localDate.atStartOfDay();
LocalDateTime localDateTime2 = localDate.atTime(8,20,33);
LocalDateTime localDateTime3 = localDate.atTime(LocalTime.now());
LocalDate 轉 Date
先調用 atStartOfDay() 方法轉 LocalDateTime 再轉 Date
LocalDate localDate = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
Date date = Date.from(localDate.atStartOfDay().atZone(zoneId).toInstant());
Date 轉 LocalDateTime
先轉 ZonedDateTime 再轉 LocalDateTime
Date date = new Date();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = date.toInstant().atZone(zoneId).toLocalDateTime();
Date 轉 LocalDate
跟 LocalDate 同理
Date date = new Date();
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = date.toInstant().atZone(zoneId).toLocalDate();