Wie die DST-Lücke und Überlappung zu bekommen?

user2923322:

ZonedDateTimescheint nicht erkennen zu lassen , wenn das Datum in einem DST Lücke oder Überlappung gegeben ist. Die docs sagen für das ofVerfahren (a Schaffung ZonedDateTime):

Im Falle einer Überlappung, wenn die Uhren zurück gesetzt werden, gibt es zwei gültige Offsets. Bei dieser Methode wird die frühere Offset typischerweise auf „Sommer“ entspricht.

Im Falle einer Lücke, wenn die Uhren vorwärts springen, gibt es keine gültige Offset. Stattdessen wird die lokale Datum-Zeit später durch die Länge des Spaltes eingestellt werden.

^ Wie oben zu lesen, wird diese Methode nur einen Wert zurückgeben aber wird mich nicht erlauben, zu wissen, ob eine DST Lücke oder Überlappung auftritt.

Ich würde gerne wissen, ob das Datum in einem Spalt oder Überlappung vorgesehen ist, und haben das Startdatum und das Enddatum der Lücke oder Überlappung.

Zum Beispiel:

„1920.09.01 00.10“ für Zeitzone „Afrika / Accra“ ist in einer DST Lücke .
Der Spalt ist von "1920.09.01 00: 00: 00 + 00: 00" bis "1920.09.01 00: 20: 00 + 00: 20" .

„1920.12.30 23.50“ für die Zeitzone „Afrika / Accra“ ist in einer DST überlappen .
Die Überlappungs betreffen die Perioden:
"1920.12.30 23: 40: 00 + 00: 20" bis "1920.12.31 00: 00: 00 + 00: 20" und
„1920.12.30 23.40: 00 + 00: 00" bis "1920.12.31 00: 00: 00 + 00: 00"

Wie kann ich diese Daten im Fall einer Lücke oder Überlappung wie in den obigen Beispielen erhalten?

Kehrmaschine:

Ich glaube nicht , es physikalisch möglich ist , eine zu schaffen , ZonedDateTimedie in einem Spalte Übergang ist, weil das lokale Datum Mal , dass ein Spalt Übergang über springt technisch „nicht existent“, und ZonedDateTimeist sehr streng darüber. Je nach Ihrer Methode, wird es entweder eine Ausnahme oder anpassen , um eine Zeit werfen, die es gibt.

Sie sollten diese Überprüfung bei tun LocalDateTimes, nicht ZonedDateTimes.

ZoneRuleshat diese sehr bequeme Methode genannt , getTransitiondie eine nimmt LocalDateTimeund gibt Ihnen ein ZoneOffsetTransition, die einen Spalt / Überlappung Übergang, oder stellt , nullob das Datum Zeit keinen Übergang hat. Beispiel:

System.out.println(ZoneId.of("Africa/Accra").getRules()
                    .getTransition(LocalDateTime.of(1920, 9, 1, 00, 10)));

Ausgabe:

Transition[Gap at 1920-09-01T00:00Z to +00:20]

Anschließend können Sie erhalten alle Informationen , die Sie wollen (Start, Ende, versetzt vor, Versatz nach Lücken- / Überlappung usw.) aus dem ZoneOffsetTransitionObjekt.

Ich denke du magst

Origin http://10.200.1.11:23101/article/api/json?id=478577&siteId=1
Empfohlen
Rangfolge