1. Einführung der Date Time API
Den Entwicklern von Java gefiel die Situation mit den Klassen „Datum“ und „Kalender“ nicht. Sie waren zu ihrer Zeit gut, aber die Zeiten ändern sich. Und etwas Einfaches, Kraftvolles und Zuverlässiges wurde notwendig. Und mit der Veröffentlichung von Java 8 (15 Jahre nach Calendar
dem Erscheinen) wurde die Java Date Time API eingeführt. Dabei handelt es sich um eine Reihe von Klassen, die in der Lage sein sollen, jede mögliche Aufgabe im Zusammenhang mit der Zeit zu lösen.
Es gab so viele Klassen, dass sie in mehrere Pakete aufgeteilt wurden:
Das java.time
Paket ist das Basispaket für die Java Date Time API: Es enthält Klassen wie LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
und Duration
. Alle Objekte dieser Klassen sind immutable
, d. h. sie können nach der Erstellung nicht mehr geändert werden.
Das java.time.format
Paket enthält Klassen zur Zeitformatierung, also zur Konvertierung von Zeiten (und Datumsangaben) in Strings und umgekehrt. Es enthält beispielsweise die DateTimeFormatter
Klasse „Vielseitig“, die die Klasse ersetzt SimpleDateFormat
.
Das java.time.zone
Paket enthält Klassen für die Arbeit mit Zeitzonen. Es enthält Klassen wie TimeZone
und ZonedDateTime
. Wenn Sie Servercode für Clients schreiben, die sich in verschiedenen Teilen der Welt befinden, benötigen Sie diese Klassen unbedingt.
2. LocalDate
Klasse
Die erste und nützlichste Klasse der Date Time API, die wir uns ansehen werden, ist die LocalDate
Klasse. Wie Sie wahrscheinlich anhand des Namens erraten können, ist diese Klasse für die Arbeit mit Datumsangaben konzipiert.
Objekte dieser Klasse ändern sich nach ihrer Erstellung nicht, dh die LocalDate
Klasse ist unveränderlich. Aber diese Eigenschaft verleiht der Klasse Einfachheit und Zuverlässigkeit. Insbesondere wenn mehrere Threads (Ausführungsthreads) gleichzeitig mit einem solchen Objekt interagieren.
Um ein neues LocalDate
Objekt zu erstellen, müssen Sie eine der statischen Methoden verwenden. Hier ist eine Liste der wichtigsten.
Aktuelles Datum abrufen
Um das aktuelle Datum zu erhalten, müssen Sie die statische now()
Methode verwenden. Das ist viel einfacher als es scheint:
LocalDate today = LocalDate.now();
Wo today
ist eine LocalDate
Variable und LocalDate.now()
ein Aufruf der statischen now()
Methode der LocalDate
Klasse.
Beispiel:
Code | Konsolenausgabe |
---|---|
|
|
Ein Datum in einer bestimmten Zeitzone abrufen
Die LocalDate
Klasse verfügt außerdem über eine Variation der now(ZoneId)
Methode, mit der Sie das aktuelle Datum in einer bestimmten Zeitzone abrufen können.
Dazu benötigen wir eine weitere Klasse – die ZoneId
Klasse (java.time.ZoneId). Es verfügt über eine Methode, die ein Objekt mit dem Namen der Zeitzone of()
zurückgibt .ZoneId
Um das aktuelle Datum in Shanghai zu ermitteln, müssen Sie den folgenden Code schreiben:
Code | Konsolenausgabe |
---|---|
|
|
Eine Liste mit den Namen aller Zeitzonen finden Sie im Internet.
3. Ein bestimmtes Datum erhalten
Um ein Objekt zu erhalten , das ein bestimmtes Datum darstellt, müssen Sie die statische Methode LocalDate
verwenden . of()
Auch hier ist alles ganz einfach und klar:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Wo date
ist eine LocalDate
Variable und ein Aufruf der statischen Methode der Klasse.LocalDate.of()
of()
LocalDate
Hier sehen wir die FEBRUARY
Konstante der Month
Klasse (java.time.Month), die verwendet wird, um Februar als Monat anzugeben.
Sie können den Monat auch auf altmodische Weise angeben – mit einer Zahl:
LocalDate date = LocalDate.of(2019, 2, 22);
Zwei? Statt Februar? Bedeutet das, dass die Monate wieder von eins an gezählt werden?
Ja, fast 20 Jahre nach der Entwicklung von Java werden Monate endlich nicht mehr von Null an gezählt.
Beispiel:
Code | Konsolenausgabe |
---|---|
|
|
Ein Datum anhand des Tagesindex ermitteln
Es gibt noch eine weitere interessante Möglichkeit, ein Datum zu erstellen: Mit dieser ofYearDay
Methode können Sie ein Datum erhalten, das nur auf der Jahreszahl und dem Index des Tages im Jahr basiert. Hier ist das allgemeine Erscheinungsbild:
LocalDate date = LocalDate.ofYearDay(year, day);
Dabei year
ist die Zahl des Jahres und day
der Index des Tages im Jahr.
Beispiel:
Code | Konsolenausgabe |
---|---|
|
|
Der 100. Tag des Jahres 2019 ist der 10. April.
Einen Unix-Termin bekommen
Erinnern Sie sich, dass Date
Objekte seit dem 1. Januar 1970 die Zeit immer als Anzahl der Millisekunden gespeichert haben? Um sicherzustellen, dass Programmierer die guten alten Zeiten nicht verpassen, LocalDate
erhielt die Klasse eine ofEpochDay()
Methode, die das vom 1. Januar 1970 berechnete Datum zurückgibt. Hier ist das allgemeine Erscheinungsbild:
LocalDate date = LocalDate.ofEpochDay(day);
Wo day
ist die Anzahl der Tage, die seit dem 1. Januar 1970 vergangen sind?
Beispiel:
Code | Konsolenausgabe |
---|---|
|
|
4. Elemente eines Datums abrufen
Es ist nicht möglich, Objekte zu ändern LocalDate
, aber Sie können einzelne Elemente des gespeicherten Datums abrufen. LocalDate
Objekte verfügen hierfür über mehrere Methoden:
Methode | Beschreibung |
---|---|
|
Gibt das Jahr eines bestimmten Datums zurück |
|
Gibt den Monat des Datums zurück: eine von mehreren KonstantenJANUARY, FEBRUARY, ...; |
|
Gibt den Index des Monats des Datums zurück. Januar == 1. |
|
Gibt den Index des Tages des Monats zurück |
|
Gibt den Tagesindex vom Jahresanfang zurück |
|
Gibt den Wochentag zurück: eine von mehreren KonstantenMONDAY, TUESDAY, ...; |
|
Gibt die Ära zurück: entweder BCE (Vor der aktuellen Ära) und CE (Aktuelle Ära) |
Beispiel:
Code | Konsolenausgabe |
---|---|
|
|
5. Ändern des Datums in einem LocalDate
Objekt
Die LocalDate
Klasse enthält mehrere Methoden, mit denen Sie mit Datumsangaben arbeiten können. Die Implementierung dieser Methoden erfolgt analog zu den Methoden der String
Klasse: Sie verändern nicht das bestehende LocalDate
Objekt, sondern geben ein neues mit den gewünschten Daten zurück.
Hier sind die Methoden der LocalDate
Klasse:
Methode | Beschreibung |
---|---|
|
Fügt dem Datum eine angegebene Anzahl von Tagen hinzu |
|
Fügt dem Datum Wochen hinzu |
|
Fügt dem Datum Monate hinzu |
|
Fügt dem Datum Jahre hinzu |
|
Subtrahiert Tage vom Datum |
|
Subtrahiert Wochen vom Datum |
|
Subtrahiert Monate vom Datum |
|
Subtrahiert Jahre vom Datum |
Beispiel:
Code | Konsolenausgabe |
---|---|
|
|
Die birthday object
wessen Methoden, die wir aufrufen, ändern sich nicht. Stattdessen geben seine Methoden neue Objekte zurück, die die gewünschten Daten enthalten.
GO TO FULL VERSION