logo

Java-Datum und -Uhrzeit

Die Pakete java.time, java.util, java.sql und java.text enthalten Klassen zur Darstellung von Datum und Uhrzeit. Die folgenden Klassen sind wichtig für den Umgang mit Datumsangaben in Java.

Java 8 Datum/Uhrzeit-API

Java hat seit Java 8 eine neue Datums- und Uhrzeit-API eingeführt. Das Paket java.time enthält Java 8-Datums- und Uhrzeitklassen.

Klassische Datums-/Uhrzeit-API

Aber auch die klassische oder alte Java Date API ist nützlich. Sehen wir uns die Liste der klassischen Datums- und Uhrzeitklassen an.

Datum und Uhrzeit formatieren

Wir können Datum und Uhrzeit in Java formatieren, indem wir die folgenden Klassen verwenden:

Java-APIs für Datum und Uhrzeit

Java stellt die Datums- und Uhrzeitfunktion mithilfe der beiden Pakete java.time und java.util bereit. Das Paket java.time wird in Java 8 eingeführt, und die neu eingeführten Klassen versuchen, die Mängel der alten Klassen java.util.Date und java.util.Calendar zu überwinden.

Klassische Datum/Uhrzeit-API-Klassen

Die primären Klassen vor der Veröffentlichung von Java 8 waren:

Klasse vs. Objekt Java

Java.lang.System: Die Klasse stellt die Methode currentTimeMillis() bereit, die die aktuelle Zeit in Millisekunden zurückgibt. Es zeigt das aktuelle Datum und die aktuelle Uhrzeit in Millisekunden ab dem 1. Januar 1970.

java.util.Datum: Es wird verwendet, um einen bestimmten Zeitpunkt in der Einheit Millisekunde anzuzeigen.

java.util.Calendar: Es handelt sich um eine abstrakte Klasse, die Methoden zum Konvertieren zwischen Instanzen und zum Bearbeiten der Kalenderfelder auf unterschiedliche Weise bereitstellt.

java.text.SimpleDateFormat: Es handelt sich um eine Klasse, die zum Formatieren und Analysieren der Daten auf eine vordefinierte Weise oder ein benutzerdefiniertes Muster verwendet wird.

java.util.TimeZone: Es stellt einen Zeitzonenversatz dar und berechnet auch die Sommerzeit.

Nachteile bestehender Datums-/Uhrzeit-APIs

    Thread-Sicherheit:Die vorhandenen Klassen wie Date und Calendar bieten keine Thread-Sicherheit. Dies führt zu schwer zu debuggenden Parallelitätsproblemen, die von Entwicklern behoben werden müssen. Die neuen Datums- und Uhrzeit-APIs von Java 8 bieten Thread-Sicherheit und sind unveränderlich, wodurch Entwickler Probleme mit der Parallelität vermeiden.Schlechtes API-Design:Die klassischen Datums- und Kalender-APIs bieten keine Methoden zur Ausführung grundlegender Alltagsfunktionen. Die in Java 8 eingeführten Datums- und Uhrzeitklassen sind ISO-zentriert und bieten eine Reihe verschiedener Methoden zum Ausführen von Operationen in Bezug auf Datum, Uhrzeit, Dauer und Zeiträume.Schwieriger Umgang mit Zeitzonen:Der Umgang mit der Zeitzone mithilfe der klassischen Datums- und Kalenderklassen ist schwierig, da die Entwickler die Logik dafür schreiben sollten. Mit den neuen APIs kann die Zeitzonenverwaltung einfach mit den APIs Local und ZonedDate/Time durchgeführt werden.

Neue Datum-Uhrzeit-API in Java 8

Die neue Datums-API hilft, die oben genannten Nachteile der Legacy-Klassen zu überwinden. Es umfasst die folgenden Klassen:

java.time.LocalDate: Es stellt ein Jahr-Monat-Tag im ISO-Kalender dar und eignet sich zur Darstellung eines Datums ohne Uhrzeit. Es kann verwendet werden, um nur Datumsinformationen wie ein Geburtsdatum oder ein Hochzeitsdatum darzustellen.

java.time.LocalTime: Es handelt sich nur um Zeit. Es ist nützlich, um menschliche Tageszeiten darzustellen, beispielsweise Kinozeiten oder die Öffnungs- und Schließzeiten der örtlichen Bibliothek.

java.time.LocalDateTime: Es verarbeitet sowohl Datum als auch Uhrzeit, ohne Zeitzone. Es ist eine Kombination aus LocalDate und LocalTime.

java.time.ZonedDateTime: Es kombiniert die LocalDateTime-Klasse mit den in der ZoneId-Klasse angegebenen Zoneninformationen. Es stellt einen vollständigen Datums- und Zeitstempel zusammen mit Zeitzoneninformationen dar.

java.time.OffsetTime: Es verarbeitet die Zeit mit einem entsprechenden Zeitzonenversatz von Greenwich/UTC, ohne Zeitzonen-ID.

java.time.OffsetDateTime: Es verarbeitet ein Datum und eine Uhrzeit mit einem entsprechenden Zeitzonenversatz von Greenwich/UTC, ohne Zeitzonen-ID.

java.time.Clock: Es bietet Zugriff auf den aktuellen Zeitpunkt, das aktuelle Datum und die aktuelle Uhrzeit in einer beliebigen Zeitzone. Obwohl die Verwendung der Clock-Klasse optional ist, können wir mit dieser Funktion Ihren Code für andere Zeitzonen testen oder eine feste Uhr verwenden, bei der sich die Zeit nicht ändert.

java.time.Instant : Es stellt den Beginn einer Nanosekunde auf der Zeitachse dar (seit EPOCH) und ist nützlich für die Generierung eines Zeitstempels zur Darstellung der Maschinenzeit. Ein Zeitpunkt, der vor der Epoche auftritt, hat einen negativen Wert, und ein Zeitpunkt, der nach der Epoche auftritt, hat einen positiven Wert.

java.time.Duration: Die Differenz zwischen zwei Zeitpunkten wird in Sekunden oder Nanosekunden gemessen und verwendet keine datumsbasierten Konstrukte wie Jahre, Monate und Tage, obwohl die Klasse Methoden bereitstellt, die in Tage, Stunden und Minuten konvertieren.

java.time.Period : Es wird verwendet, um die Differenz zwischen Datumsangaben in datumsbasierten Werten (Jahre, Monate, Tage) zu definieren.

java.time.ZoneId: Es gibt eine Zeitzonenkennung an und stellt Regeln für die Konvertierung zwischen einem Instant und einem LocalDateTime bereit.

java.time.ZoneOffset : Es beschreibt einen Zeitzonenversatz zur Greenwich/UTC-Zeit.

java.time.format.DateTimeFormatter : Es werden verschiedene vordefinierte Formatierer bereitgestellt, oder wir können unsere eigenen definieren. Es verfügt über die Methoden parse() oder format() zum Parsen und Formatieren der Datums- und Uhrzeitwerte.