【JAVA】Date 與 LocalDateTime 相互轉換,瞭解一下?

在業務開發中,我們經常需要進行DateLocalDateTime 的相互轉換。
下面我們一起來學習一下吧!

talk is cheap, show me the code.

Date ⇒ LocalDateTime

  • 方式一:使用 Instant 的 atZone 進行轉換
  • 方式二:使用 LocalDateTime 的 ofEpochSecond 進行轉換
  • 方式三:使用 LocalDateTime 的 ofInstant 進行轉換(封裝的 ofEpochSecond 方法)
Date date = new Date();
// @since 1.8
Instant instant = date.toInstant();

// 設置時區
ZoneOffset zoneOffset = ZoneOffset.of("+8");

// 方式一:使用 Instant 的 atZone 進行轉換
LocalDateTime localDateTime1 = instant.atZone(zoneOffset).toLocalDateTime();
LocalDate localDate = instant.atZone(zoneOffset).toLocalDate();
LocalTime localTime = instant.atZone(zoneOffset).toLocalTime();


// 方式二:使用 LocalDateTime 的 ofEpochSecond 進行轉換
LocalDateTime localDateTime2 = LocalDateTime.ofEpochSecond(instant.getEpochSecond(), instant.getNano(), zoneOffset);

// 方式三:使用 LocalDateTime 的 ofInstant 進行轉換(封裝的 ofEpochSecond 方法)
LocalDateTime localDateTime3 = LocalDateTime.ofInstant(instant, zoneOffset);

LocalDateTime ⇒ Date

LocalDateTime now = LocalDateTime.now();
// 設置時區
ZoneOffset zoneOffset = ZoneOffset.of("+8");
Instant instant = now.toInstant(zoneOffset);
// @since 1.8
Date date = Date.from(instant);

擴展

  • Instant:表示時刻,不直接對應年月日信息,需要通過時區轉換
  • LocalDateTime: 表示與時區無關的日期和時間信息,不直接對應時刻,需要通過時區轉換
  • LocalDate:表示與時區無關的日期,與LocalDateTime相比,只有日期信息,沒有時間信息
  • LocalTime:表示與時區無關的時間,與LocalDateTime相比,只有時間信息,沒有日期信息
  • ZonedDateTime: 表示特定時區的日期和時間
  • ZoneId/ZoneOffset:表示時區

時間格式化

System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDate.now()));
System.out.println(DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalTime.now()));

控制檯輸出

2020-06-13 12:42:49
2020-06-13
12:42:49
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章