ZoneOffset in Java

ZoneOffset in Java

1. Einführung

In unserer Welt folgt jedes Land einer bestimmten Zeitzone. Diese Zeitzonen sind entscheidend, um die Zeit bequem und effektiv auszudrücken. Zeitzonen können jedoch manchmal unerklärlich sein, da Variablen wie die Sommerzeit in das Bild eingehen.

Darüber hinaus kann es bei der Darstellung dieser Zeitzonen in unserem Code zu Verwirrung kommen. Java hat in der Vergangenheit mehrere Klassen wieDate,Time undDateTime bereitgestellt, um auch Zeitzonen zu berücksichtigen.

Neue Java-Versionen bieten jedoch nützlichere und aussagekräftigere Klassen wieZoneId undZoneOffset für die Verwaltung von Zeitzonen.

In diesem Artikel werdenwe’ll discuss ZoneId and ZoneOffset as well as related DateTime classes.

Wir können auch in unserenprevious post über den neuen Satz vonDateTime-Klassen lesen, die in Java 8 eingeführt wurden.

2. ZoneId undZoneOffset

Mit dem Aufkommen vonJSR-310 wurden einige nützliche APIs zum Verwalten von Datum, Uhrzeit und Zeitzonen hinzugefügt. Als Teil dieses Updates wurden auch die KlassenZoneId undZoneOffset hinzugefügt.

2.1. ZoneId

Wie oben angegeben,ZoneId is a representation of the time-zone wie „Europe/Paris“.

Es gibt 2 Implementierungen vonZoneId. Erstens mit einem festen Versatz im Vergleich zu GMT / UTC. Und zweitens als geografische Region, die eine Reihe von Regeln zur Berechnung des Offsets mit GMT / UTC enthält.

Erstellen wir einZoneIdfür Berlin, Deutschland:

ZoneId zone = ZoneId.of("Europe/Berlin");

2.2. ZoneOffset

ZoneOffset extends ZoneId anddefinesthe fixed offset of the current time-zone with GMT/UTC, wie z. B. +02: 00.

Dies bedeutet, dass diese Zahl feste Stunden und Minuten darstellt, die die Differenz zwischen der Zeit in der aktuellen Zeitzone und GMT / UTC darstellen:

LocalDateTime now = LocalDateTime.now();
ZoneId zone = ZoneId.of("Europe/Berlin");
ZoneOffset zoneOffSet = zone.getRules().getOffset(now);

In case a country has 2 different offsets – in summer and winter, there will be 2 different ZoneOffset implementations for the same region, hence the need to specify a LocalDateTime.

3. DateTime Klassen

Als nächstes diskutieren wir einigeDateTime Klassen, die tatsächlichZoneId undZoneOffset nutzen.

3.1. ZonedDateTime

ZonedDateTime ist eine unveränderliche Darstellung einer Datums- und Uhrzeitangabe mit einer Zeitzone im ISO-8601-Kalendersystem, z. B.2007-12-03T10:15:30+01:00 Europe/Paris. ZonedDateTime holds state equivalent to three separate objects, a LocalDateTime, a ZoneId and the resolved ZoneOffset

Diese Klasse speichert alle Datums- und Zeitfelder mit einer Genauigkeit von Nanosekunden und eine Zeitzone mitZoneOffset, um mehrdeutige lokale Datums- und Uhrzeitangaben zu verarbeiten. Beispielsweise kannZonedDateTime den Wert "2. Oktober 2007 um 13: 45.30.123456789 +02: 00 in der Zeitzone Europa / Paris" speichern.

Lassen Sie uns die aktuellenZonedDateTime für die vorherige Region abrufen:

ZoneId zone = ZoneId.of("Europe/Berlin");
ZonedDateTime date = ZonedDateTime.now(zone);

ZonedDateTime also bietet integrierte Funktionen zum Konvertieren eines bestimmten Datums von einer Zeitzone in eine andere:

ZonedDateTime destDate = sourceDate.withZoneSameInstant(destZoneId);

3.2. OffsetDateTime

OffsetDateTime ist eine unveränderliche Darstellung einer Datums- und Uhrzeitangabe mit einem Versatz im ISO-8601-Kalendersystem, z. B.2007-12-03T10:15:30+01:00.

This class stores all date and time fields, to a precision of nanoseconds, as well as the offset from GMT/UTC. Beispielsweise kannOffsetDateTime den Wert "2. Oktober 2007 um 13: 45.30.123456789 +02: 00" speichern.

Lassen Sie uns den aktuellen Prozentsatz (t0) mit 2 Stunden Offset von GMT / UTC abrufen:

ZoneOffset zoneOffSet= ZoneOffset.of("+02:00");
OffsetDateTime date = OffsetDateTime.now(zoneOffSet);

3.3. OffsetTime

OffsetTime ist ein unveränderliches Datums- / Uhrzeitobjekt, das eine Zeit darstellt, die im ISO-8601-Kalendersystem häufig als Stunden-Minuten-Sekunden-Versatz angesehen wird, z. B.10:15:30+01:00.

This class stores all time fields, to a precision of nanoseconds, as well as a zone offset. Beispielsweise kannOffsetTime den Wert "13: 45.30.123456789 + 02: 00" speichern.

Lassen Sie uns den aktuellen Prozentsatz (t0) mit 2 Stunden Versatz abrufen:

ZoneOffset zoneOffSet = ZoneOffset.of("+02:00");
OffsetTime time = OffsetTime.now(zoneOffSet);

4. Fazit

Zurück zum Brennpunkt:ZoneOffset ist eine Darstellung der Zeitzone in Bezug auf die Differenz zwischen GMT / UTC und der angegebenen Zeit. Dies ist eine praktische Möglichkeit, die Zeitzone darzustellen, obwohl auch andere Darstellungen verfügbar sind.

Darüber hinaus werdenZoneId undZoneOffset nicht nur unabhängig voneinander verwendet, sondern auch von bestimmtenDateTime Java-Klassen wieZonedDateTime,OffsetDateTime undOffsetTime.

Wie üblich ist der Code in unserenGitHub repository verfügbar.