将 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 的 Instant、OffsetDateTime 或 ZonedDateTime?的详细内容。更多信息请关注PHP中文网其他相关文章!