【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

你可能感兴趣的:(#,JAVA基础,#,JAVA,8,系列)