1. ZonedDateTime
Klasse
Es gibt eine weitere sehr interessante Klasse in der Date Time API: die ZonedDateTime
Klasse. Sein Hauptzweck besteht darin, die Arbeit mit Datumsangaben in verschiedenen Zeitzonen zu erleichtern.
LocalDate
eignet 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.
LocalTime
eignet 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 ZoneId
Klasse aus dem java.time
Paket 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) |
---|---|
|
|
Um ein Objekt anhand seines Namens abzurufen , müssen Sie die statische Methode ZoneId
verwenden .of()
Code | Notiz |
---|---|
|
|
ZonedDateTime
2. Ein Objekt erstellen
Wenn Sie ein Objekt erstellen , müssen Sie die statische Methode ZonedDateTime
der Klasse aufrufen und ihr ein Objekt übergeben.now()
ZoneId
Code | Konsolenausgabe |
---|---|
|
|
ZoneId
Wenn 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 |
---|---|
|
|
Konvertieren eines globalen Datums in ein lokales
Eine der interessanten Funktionen von ZonedDateTime
ist 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 LocalDateTime
Klasse ZonedDateTime
verfügt auch die Klasse über viele Möglichkeiten, einzelne Elemente eines Datums und einer Uhrzeit abzurufen. Hier ist eine Liste dieser Methoden:
|
Gibt das Jahr eines bestimmten Datums zurück |
|
Gibt den Monat des Datums zurück: eine von mehreren Konstanten –JANUARY, FEBRUARY, ...; |
|
Gibt den Index des Monats des Datums zurück. Januar == 1 |
|
Gibt den Index des Tages des Monats zurück |
|
Gibt den Wochentag zurück: eine von mehreren Konstanten –MONDAY, TUESDAY, ...; |
|
Gibt den Index des Tages des Jahres zurück |
|
Gibt die Stunden zurück |
|
Gibt die Minuten zurück |
|
Gibt die Sekunden zurück |
|
Gibt die Nanosekunden zurück |
Alle Methoden sind vollkommen analog zu den Methoden der LocalDateTime
Klasse. Und natürlich ZonedDateTime
verfü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 ZonedDateTime
Objekt zurück:
Methoden | Beschreibung |
---|---|
|
Fügt dem Datum Jahre hinzu |
|
Fügt dem Datum Monate hinzu |
|
Fügt dem Datum Tage hinzu |
|
Fügt Stunden hinzu |
|
Fügt Minuten hinzu |
|
Fügt Sekunden hinzu |
|
Fügt Nanosekunden hinzu |
|
Subtrahiert Jahre vom Datum |
|
Subtrahiert Monate vom Datum |
|
Subtrahiert Tage vom Datum |
|
Subtrahiert Stunden |
|
Subtrahiert Minuten |
|
Subtrahiert Sekunden |
|
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.
GO TO FULL VERSION