首页 >Java >java教程 >如何将 java.util.Date 转换为 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime?

如何将 java.util.Date 转换为 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 11:24:29725浏览

How do I convert java.util.Date to java.time's Instant, OffsetDateTime, or ZonedDateTime?

将 java.util.Date 转换为 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime

当我们迁移到现代 java.time 框架时,了解如何将遗留 java.util.Date 对象转换为适当的 java.time 类型至关重要。以下是等效项的概述:

java.util.Date 到 Instant

两者都代表 UTC 中的时刻,因此转换很简单:

<code class="java">Instant instant = myUtilDate.toInstant();

java.util.Date myUtilDate = java.util.Date.from(instant);</code>

java.util.Date 到 java.time 的 OffsetDateTime 或 ZonedDateTime

由于这些类型包含时区信息,因此需要从旧 Date 中提取区域:

<code class="java">// If the legacy date is a GregorianCalendar (which can hold time zone info)
if (myUtilCalendar instanceof GregorianCalendar) {
    GregorianCalendar gregCal = (GregorianCalendar) myUtilCalendar;
    ZonedDateTime zdt = gregCal.toZonedDateTime(); // ZonedDateTime with time zone

    java.util.Calendar myUtilCalendar = java.util.GregorianCalendar.from(zdt);
}</code>

其他转换映射

Legacy Type java.time Equivalent Additional Notes
java.util.Calendar Instant Converts to the start of the day in UTC
java.util.GregorianCalendar ZonedDateTime Retains time zone information
java.util.LocalDate ZonedDateTime Requires a time zone to determine the date
java.util.LocalTime Instant Converts to the start of the day in UTC
java.util.LocalDateTime ZonedDateTime Requires a time zone to determine the date and time

重要注意事项

  • 从 java.util.Date 转换为java.time 类型可能会导致精度损失,因为遗留类不支持纳秒分辨率。
  • 转换为 OffsetDateTime 或 ZonedDateTime 时,必须保留时区信息以确保正确解释。
  • 强烈建议在新代码中使用 java.time 类型,以提高精度和一致性。

以上是如何将 java.util.Date 转换为 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime?的详细内容。更多信息请关注PHP中文网其他相关文章!

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