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 Calendardem 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.timePaket ist das Basispaket für die Java Date Time API: Es enthält Klassen wie LocalDate, LocalTime, LocalDateTime, Instant, Periodund Duration. Alle Objekte dieser Klassen sind immutable, d. h. sie können nach der Erstellung nicht mehr geändert werden.
Das java.time.formatPaket enthält Klassen zur Zeitformatierung, also zur Konvertierung von Zeiten (und Datumsangaben) in Strings und umgekehrt. Es enthält beispielsweise die DateTimeFormatterKlasse „Vielseitig“, die die Klasse ersetzt SimpleDateFormat.
Das java.time.zonePaket enthält Klassen für die Arbeit mit Zeitzonen. Es enthält Klassen wie TimeZoneund ZonedDateTime. Wenn Sie Servercode für Clients schreiben, die sich in verschiedenen Teilen der Welt befinden, benötigen Sie diese Klassen unbedingt.
2. LocalDateKlasse
Die erste und nützlichste Klasse der Date Time API, die wir uns ansehen werden, ist die LocalDateKlasse. 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 LocalDateKlasse 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 LocalDateObjekt 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 todayist eine LocalDateVariable und LocalDate.now()ein Aufruf der statischen now()Methode der LocalDateKlasse.
Beispiel:
| Code | Konsolenausgabe |
|---|---|
|
|
Ein Datum in einer bestimmten Zeitzone abrufen
Die LocalDateKlasse 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 ZoneIdKlasse (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 LocalDateverwenden . of()Auch hier ist alles ganz einfach und klar:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Wo dateist eine LocalDateVariable und ein Aufruf der statischen Methode der Klasse.LocalDate.of()of()LocalDate
Hier sehen wir die FEBRUARYKonstante der MonthKlasse (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 ofYearDayMethode 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 yearist die Zahl des Jahres und dayder 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 DateObjekte seit dem 1. Januar 1970 die Zeit immer als Anzahl der Millisekunden gespeichert haben? Um sicherzustellen, dass Programmierer die guten alten Zeiten nicht verpassen, LocalDateerhielt 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 dayist 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. LocalDateObjekte 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 LocalDateObjekt
Die LocalDateKlasse enthält mehrere Methoden, mit denen Sie mit Datumsangaben arbeiten können. Die Implementierung dieser Methoden erfolgt analog zu den Methoden der StringKlasse: Sie verändern nicht das bestehende LocalDateObjekt, sondern geben ein neues mit den gewünschten Daten zurück.
Hier sind die Methoden der LocalDateKlasse:
| 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 objectwessen 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