DSTのギャップや重複を取得する方法?

user2923322:

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オブジェクト。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=478581&siteId=1