モジュール java.base
パッケージ java.time

クラスZonedDateTime

java.lang.Object
java.time.ZonedDateTime
すべての実装されたインタフェース:
Serializable, Comparable<ChronoZonedDateTime<?>>, ChronoZonedDateTime<LocalDate>, Temporal, TemporalAccessor

public final class ZonedDateTime extends Object implements Temporal, ChronoZonedDateTime<LocalDate>, Serializable
ISO-8601の暦体系によるタイムゾーン付きの日付/時間です(2007-12-03T10:15:30+01:00 Europe/Parisなど)。

ZonedDateTimeはタイムゾーン付き日付/時間の不変表現です。 このクラスは、すべての日付および時間フィールド (ナノ秒精度) とタイムゾーン (あいまいなローカル日付/時間を処理するために使用するゾーン・オフセット付き) を格納します。 たとえば、値2nd October 2007 at 13:45.30.123456789 +02:00 in the Europe/Paris time-zoneをZonedDateTimeに格納できます。

このクラスは、LocalDateTimeのローカル時系列からInstantのインスタント時系列への変換を処理します。 この2つの時系列の違いは、ZoneOffsetで表される、UTC/グリニッジからのオフセットです。

2つの時系列の間の変換には、ZoneIdからアクセスされるルールを使用したオフセット計算が必要です。 インスタントのオフセットを取得するのは単純です。インスタントごとに有効なオフセットは正確に1つだけ存在するためです。 これに対し、ローカル日付/時間のオフセットを取得することは単純ではありません。 3つのケースがあります。

  • 通常、有効なオフセットが1つ。 年の大部分は通常ケースが適用されます。ローカル日付/時間に有効なオフセットが1つ存在します。
  • ギャップ、有効なオフセットがゼロ。 これは一般的に、春サマー・タイムが冬から夏に変わったために、クロックが前方向にジャンプするときです。 ギャップには、有効なオフセットを持たないローカル日付/時間値が存在します。
  • 重複、有効なオフセットが2つ。 これは一般的に、秋サマー・タイムが夏から冬に変わったために、クロックが後方向に戻るときです。 重複には、有効なオフセットを2つ持つローカル日付/時間値が存在します。

オフセットを取得することで直接または暗黙にローカル日付/時間からインスタントに変換するメソッドは、複雑になる可能性があります。

ギャップの一般戦略では、ローカル日付/時間がギャップ内にある場合は、結果のゾーン付き日付/時間はローカル日付/時間をギャップの長さ分前方向にシフトさせます。その結果、後のオフセット内の日付/時間(一般的に夏時間)になります。

重複の一般戦略では、ローカル日付/時間が重複内にある場合は、直前のオフセットが保持されます。 直前のオフセットがない場合、または直前のオフセットが無効な場合、先のオフセット(一般的に夏時間)が使用されます。 2つの追加メソッド(withEarlierOffsetAtOverlap()withLaterOffsetAtOverlap())は、重複のケースを管理するのに役立ちます。

設計の観点からは、このクラスは主としてLocalDateTimeおよびZoneIdの組合せとして表示するべきです。 ZoneOffsetは、クラスがインスタントを表現することを保証するために使用される(特にサマー・タイム重複中)、重要ですが補助的な情報です。

これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 比較する場合は、equalsメソッドを使用することをお薦めします。

実装要件:
ZonedDateTimeは、3つの別個のオブジェクト(LocalDateTimeZoneIdおよび解決されたZoneOffset)と同等の状態を保持します。 オフセットとローカル日付/時間は、必要に応じてインスタントを定義するために使用されます。 ゾーンIDは、オフセットがどのようにいつ変化するかのルールを取得するために使用されます。 どのオフセットが有効かはゾーンが制御するため、オフセットは自由に設定できません。

このクラスは不変でスレッドセーフです。

導入されたバージョン:
1.8
関連項目: