ZonedDateTime
指定された日付は、DSTギャップまたはオーバーラップしているかどうかを検出できるようには思えません。ドキュメントは、のために言うof
方法(作成しますZonedDateTime
):
クロックをセットバックされたオーバーラップの場合には、2つの有効なオフセットが存在します。この方法は、以前通常、「夏」に対応したオフセットを使用しています。
クロックが前方にジャンプするときのギャップの場合に、オフセット有効なありません。代わりに、ローカル日時はギャップの長さによって、後に調整されます。
^上記の読み通り、このメソッドは、単に値を返しますが、DSTのギャップや重複が発生した場合、私は知ることができません。
私は、提供日は、ギャップまたは重複しているかどうかを知り、そして開始日およびギャップまたは重複の終了日を持っていると思います。
例えば:
「1920年9月1日午後12時10分」の時間帯のための「アフリカ/アクラは」であるDSTギャップ。
ギャップがあるから、 "1920年9月1日00:00:00 + 00:00" "1920年9月1日00:20:00 + 00:20"に。
「1920年12月30日23時50分」の時間帯のための「アフリカ/アクラは」であるDSTの重複。
オーバーラップの問題期間:
":00:00 + 00:1920年12月31日00 20"から"20 1920年12月30日23:40:00 + 00"と
「1920年12月30日23:40: 00 + 00:00"を"1920年12月31日00:00:00 + 00:00"
どのように私はこれらの日付は、上記の例のように、ギャップや重複した場合に得ることができますか?
私はそれを作成することが物理的に可能であるとは思わないZonedDateTime
ギャップ遷移がスキップしていることローカルの日付時刻が技術的に「非存在」であるため、ギャップ遷移であることを、そしてZonedDateTime
このことについては非常に厳しいです。あなたの方法に応じて、それはどちらかの例外がスローされますか、存在している時間を調整します。
あなたがこのチェックを行う必要がありLocalDateTime
、S、ありませんZonedDateTime
よ。
ZoneRules
呼ばれるこの非常に便利な方法があるgetTransition
取りLocalDateTime
、あなた与えZoneOffsetTransition
ギャップ/オーバーラップ推移を表し、または、null
その日付の時間遷移を持っていない場合に。例:
System.out.println(ZoneId.of("Africa/Accra").getRules()
.getTransition(LocalDateTime.of(1920, 9, 1, 00, 10)));
出力:
Transition[Gap at 1920-09-01T00:00Z to +00:20]
あなたは、その後から(ギャップ/オーバーラップなど、後のオフセット、前オフセット、終了を開始)したいすべての情報を得ることができるZoneOffsetTransition
オブジェクト。