首頁 >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:29719瀏覽

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

將java.util.Date 轉換為java.time 的Instant、OffsetDateTime 或ZonedDateTime

當我們遷移到現代javatime.時,了解如何將遺留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 中提取區域:

由於這些類型包含時區信息,因此需要從舊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. java.time 類型可能會導致精度損失,因為遺留類別不支援奈秒解析度。
  • 轉換為 OffsetDateTime 或 ZonedDateTime 時,必須保留時區資訊以確保正確解釋。
  • 強烈建議在新程式碼中使用 java.time 類型,以提高精確度和一致性。

以上是如何將 java.util.Date 轉換為 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn