首页  >  文章  >  Java  >  如何在 java.time.LocalDateTime 和 java.util.Date 之间转换?

如何在 java.time.LocalDateTime 和 java.util.Date 之间转换?

Linda Hamilton
Linda Hamilton原创
2024-11-13 02:53:02211浏览

How to Convert Between java.time.LocalDateTime and java.util.Date?

在 java.time.LocalDateTime 和 java.util.Date 之间转换

随着 Java 8 引入 java.time 包,开发人员已经接受了它的新 API 来处理日期和时间。在其类中,LocalDateTime 拥有与时区无关的日期与时间值。

但是,遗留代码通常依赖于 java.util.Date 类。当集成新旧代码库时,这两个类之间的转换是必要的。

转换方法:

从 java.util.Date 到 LocalDateTime:

  1. 使用 toInstant() 方法将 java.util.Date 转换为 Instant。
  2. 使用 ZoneId.systemDefault() 指定时区,通过 ofInstant() 创建 LocalDateTime( ).

代码:

Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());

从 LocalDateTime 到 java.util.Date:

  1. 使用 atZone(ZoneId) 将 LocalDateTime 转换为 ZonedDateTime。
  2. 使用 toInstant() 将 ZonedDateTime 转换为 Instant,然后使用 Date.from() 将 ZonedDateTime 转换为 java.util.Date。

代码:

LocalDateTime ldt = ...
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date output = Date.from(zdt.toInstant());

关于夏令时 (DST) 的注意事项:

从 LocalDateTime 转换为 java.util由于 DST,通过 ZonedDateTime 的日期可能会引入意外行为。某些 LocalDateTime 值可能不存在,或者可能在 DST 转换期间出现两次。有关详细信息,请参阅 atZone(ZoneId) 的 Javadoc。

其他注意事项:

  • java.util.Date 表示时间线上的瞬间,而 java.time.* 中的 Instant 表示没有时区的瞬间。
  • LocalDateTime 和 java.util.Date 之间的转换可能会因 1582 年之前的日历系统(儒略历与公历)差异而导致不同的瞬间.

以上是如何在 java.time.LocalDateTime 和 java.util.Date 之间转换?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn