ZonedDateTimeとOffsetDateTimeの違い

1. 概要

_ZonedDateTime_および_OffsetDateTime_は、https://www.baeldung.com/java-8-date-time-intro [Java 8 _DateTime_ API] __.._で非常に人気のあるクラスです。さらに、*両方ともnanoseconds __.__ *の精度
このクイックチュートリアルでは、_ZonedDateTime_と_OffsetDateTime_の違いを見ていきます。

2. ZonedDateTime

_ZonedDateTime_は、__ 2007-12-03T10:15:30 01:00 Europe / Pari__sなど、ISO-8601カレンダーシステムのタイムゾーンを持つ日時の不変の表現です。 * _LocalDateTime _、_ ZoneId_、および解決されたlink:/java-zone-offset[_ZoneOffset_]の3つの個別のオブジェクトに相当する状態を保持します。 *
ここで、_ZoneId_は、オフセットがいつどのように変化するかを決定します。 したがって、ゾーンは有効なオフセットを制御するため、オフセットを自由に設定することはできません。
特定の地域の現在の_ZonedDateTime_を取得するには、次を使用します。
ZoneId zone = ZoneId.of("Europe/Berlin");
ZonedDateTime zonedDateTime = ZonedDateTime.now(zone);
_ZonedDateTime_クラスは、特定の日付をあるタイムゾーンから別のタイムゾーンに変換するための組み込みメソッドも提供します。
ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant(destZoneId);
最後に、これは*完全にDSTを認識し、夏時間の調整を処理します。*特定のタイムゾーンで日時フィールドを表示する場合に便利なことがよくあります。

3. OffsetDateTime

_OffsetDateTime_は、_2007-12-03T10:15:30 01:00_など、ISO-8601カレンダーシステムのUTC /グリニッジからのオフセットを含む日時の不変の表現です。 つまり、すべての日付と時刻のフィールドをナノ秒の精度で、* GMT / UTC *からのオフセットで*保存します*。
GMT / UTCから2時間のオフセットで現在の__OffsetDateTime __を取得しましょう:
ZoneOffset zoneOffSet= ZoneOffset.of("+02:00");
OffsetDateTime offsetDateTime = OffsetDateTime.now(zoneOffSet);

4. 主な違い

まず、2つの日付を完全なタイムゾーン情報と直接比較することは(変換なしでは)意味がありません。 したがって、ローカル時間オフセットを持つ日付は常に同じ瞬間を表すので、常に_OffsetDateTime_を_ZonedDateTime_よりもデータベースに格納することを優先する必要があります。*
さらに、_ZonedDateTime_とは異なり、_OffsetDateTime_を格納する列にインデックスを追加しても、日付の意味は変わりません。
主な違いを簡単にまとめましょう。
  • _ZonedDateTime _:*

  • すべての日付と時刻のフィールドをナノ秒の精度で保存し、
    タイムゾーン、あいまいなローカル日時を処理するために使用されるゾーンオフセット付き

  • ゾーンは有効なオフセット値を制御するため、自由にオフセットを設定することはできません

  • DSTに完全に対応し、夏時間調整を処理します

  • ユーザー固有の日時フィールドを表示するのに便利です
    タイムゾーン

    __ * OffsetDateTime * __ **:**
  • すべての日付と時刻のフィールドをナノ秒の精度で保存します。
    GMT / UTCからのオフセット(タイムゾーン情報なし)

  • データベースに日付を保存したり、通信するために使用する必要があります
    ネットワーク経由

5. 結論

このチュートリアルでは、_ZonedDateTime_と_OffsetDateTime_の違いについて説明しました。
通常どおり、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-dates[Github上]で入手できます。