1. ZonedDateTimeKlasse

Es gibt eine weitere sehr interessante Klasse in der Date Time API: die ZonedDateTimeKlasse. Sein Hauptzweck besteht darin, die Arbeit mit Datumsangaben in verschiedenen Zeitzonen zu erleichtern.

LocalDateeignet sich hervorragend zur Darstellung von Daten. Zum Beispiel Geburtstage. Mein Geburtstag ist der 15. März, egal wo ich bin. Dies ist ein Beispiel für ein Datum.

LocalTimeeignet sich hervorragend, um Zeit zu beschreiben, wie die Zeit, die auf einem Wecker eingestellt ist: Ich stelle den Wecker auf 5:00 Uhr morgens und es spielt keine Rolle, wo ich bin. 5:00 Uhr ist 5:00 Uhr. Dies ist ein Beispiel für die Arbeit mit der Zeit.

Nehmen wir nun an, wir schreiben eine Anwendung, die Flüge bucht. Flugzeuge starten und landen basierend auf der Ortszeit. Das Flugzeug ist für eine festgelegte Zeit in der Luft, die Zeitzonen können sich jedoch ändern.

Zeitzonen

Zeitzonen sind übrigens ein echtes Chaos. Und wenn Sie denken, dass es 24 Zeitzonen gibt, irren Sie sich gewaltig.

Beispielsweise weicht die Zeit in Indien um fünfeinhalb Stunden von der Greenwich Mean Time ab: GMT+5:30. Einige Länder stellen auf Sommerzeit um, andere nicht. Darüber hinaus stellen verschiedene Länder zu unterschiedlichen Jahreszeiten auf die Sommerzeit um.

Und einige Länder erlassen Gesetze, die die Sommerzeit aufheben, sie wieder einführen oder wieder aufheben.

Auf jeden Fall gibt es auf der Welt Zeitzonen, und innerhalb jeder Zeitzone gibt es eine Zeit. Die Zeit in verschiedenen Zonen kann in bestimmten Zeiträumen des Jahres zusammenfallen und in anderen Zeiträumen abweichen. Zeitzonen werden normalerweise nach den in ihnen gelegenen Großstädten benannt: Europe/Monaco, Asia/Singapore, aber es gibt auch Ausnahmen – US/Pacific.

Offiziell gibt es derzeit 599 Zeitzonen. Denken Sie darüber nach: 599. Das ist weit entfernt von 24. Willkommen in der globalen Welt.

Die ZoneIdKlasse aus dem java.timePaket wird zum Speichern einer Zeitzone in Java verwendet.

Es verfügt übrigens über eine statische getAvailableZoneIds()Methode, die die Menge aller derzeit bekannten Zeitzonen zurückgibt. Um eine Liste aller Zonen zu erhalten, müssen Sie den folgenden Code schreiben:

Code Konsolenausgabe (teilweise)
for (String s: ZoneId.getAvailableZoneIds())
   System.out.println(s);
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8

Um ein Objekt anhand seines Namens abzurufen , müssen Sie die statische Methode ZoneIdverwenden .of()

Code Notiz
ZoneId zone = ZoneId.of("Africa/Cairo");
Cairo


ZonedDateTime2. Ein Objekt erstellen

Wenn Sie ein Objekt erstellen , müssen Sie die statische Methode ZonedDateTimeder Klasse aufrufen und ihr ein Objekt übergeben.now()ZoneId

Code Konsolenausgabe
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime time = ZonedDateTime.now(zone);
System.out.println(time);


2019-02-22T11:37:58.074816+02:00[Africa/Cairo]

ZoneIdWenn Sie der Methode kein Objekt übergeben now()(und das ist zulässig), wird die Zeitzone automatisch anhand der Einstellungen des Computers ermittelt, auf dem das Programm ausgeführt wird.

Beispiel:

Code Konsolenausgabe
ZonedDateTime time = ZonedDateTime.now();
System.out.println(time);

2019-02-22T13:39:05.70842+02:00[Europe/Helsinki]

Konvertieren eines globalen Datums in ein lokales

Eine der interessanten Funktionen von ZonedDateTimeist die Möglichkeit, in ein lokales Datum und eine lokale Uhrzeit umzuwandeln. Beispiel:

ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);

LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();

3. Mit der Zeit arbeiten

Wie die LocalDateTimeKlasse ZonedDateTimeverfügt auch die Klasse über viele Möglichkeiten, einzelne Elemente eines Datums und einer Uhrzeit abzurufen. Hier ist eine Liste dieser Methoden:

int getYear()
Gibt das Jahr eines bestimmten Datums zurück
Month getMonth()
Gibt den Monat des Datums zurück: eine von mehreren Konstanten –JANUARY, FEBRUARY, ...;
int getMonthValue()
Gibt den Index des Monats des Datums zurück. Januar == 1
int getDayOfMonth()
Gibt den Index des Tages des Monats zurück
DayOfWeek getDayOfWeek()
Gibt den Wochentag zurück: eine von mehreren Konstanten –MONDAY, TUESDAY, ...;
int getDayOfYear()
Gibt den Index des Tages des Jahres zurück
int getHour()
Gibt die Stunden zurück
int getMinute()
Gibt die Minuten zurück
int getSecond()
Gibt die Sekunden zurück
int getNano()
Gibt die Nanosekunden zurück

Alle Methoden sind vollkommen analog zu den Methoden der LocalDateTimeKlasse. Und natürlich ZonedDateTimeverfügt die Klasse über Methoden, mit denen Sie mit Datums- und Uhrzeitangaben arbeiten können. Das heißt, das Objekt, für das die Methoden aufgerufen werden, ändert sich nicht. Stattdessen geben sie ein neues ZonedDateTimeObjekt zurück:

Methoden Beschreibung
plusYears(int)
Fügt dem Datum Jahre hinzu
plusMonths(int)
Fügt dem Datum Monate hinzu
plusDays(int)
Fügt dem Datum Tage hinzu
plusHours(int)
Fügt Stunden hinzu
plusMinutes(int)
Fügt Minuten hinzu
plusSeconds(int)
Fügt Sekunden hinzu
plusNanos(int)
Fügt Nanosekunden hinzu
minusYears(int)
Subtrahiert Jahre vom Datum
minusMonths(int)
Subtrahiert Monate vom Datum
minusDays(int)
Subtrahiert Tage vom Datum
minusHours(int)
Subtrahiert Stunden
minusMinutes(int)
Subtrahiert Minuten
minusSeconds(int)
Subtrahiert Sekunden
minusNanos(int)
Subtrahiert Nanosekunden

Wir werden keine Beispiele nennen, da wir der Meinung sind, dass hier in Analogie zu den Klassen, die wir gerade betrachtet haben, alles klar ist.