Konvertieren von Java-Datum in OffsetDateTime

1. Einleitung

In diesem Tutorial lernen wir den Unterschied zwischen Date und OffsetDateTime kennen . Wir lernen auch, wie man von einem zum anderen konvertiert.

2. Unterschied zwischen Datum und OffsetDateTime

OffsetDateTime wurde in JDK 8 als moderne Alternative zu java.util.Date eingeführt .

OffsetDateTime ist eine thread-sichere Klasse, die Datum und Uhrzeit mit einer Genauigkeit von Nanosekunden speichert. Das Datum ist dagegen nicht threadsicher und speichert die Zeit bis zur Millisekundengenauigkeit.

OffsetDateTime ist ein wertorientierte Klasse, was bedeutet , dass wir verwenden müssen gleich , wenn Referenzen anstelle der typischen Vergleich ==.

Der Ausgang des OffsetDateTime 's toString Methode ist in der ISO-8601 - Format, während Datum ' s toString in einem benutzerdefinierten Nicht-Standard - Format ist.

Rufen wir toString on beider Klassen auf, um den Unterschied zu sehen:

Date: Sat Oct 19 17:12:30 2019 OffsetDateTime: 2019-10-19T17:12:30.174Z

Das Datum kann keine Zeitzonen und entsprechenden Offsets speichern. Das einzige, was ein Date- Objekt enthält, ist die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC. Wenn unsere Zeit nicht in UTC ist, sollten wir die Zeitzone in einer Hilfsklasse speichern. Im Gegenteil, OffsetDateTime speichert das ZoneOffset intern.

3. Konvertieren von Datum in OffsetDateTime

Das Konvertieren von Datum in OffsetDateTime ist ziemlich einfach. Wenn unser Datum in UTC ist, können wir es mit einem einzigen Ausdruck konvertieren:

Date date = new Date(); OffsetDateTime offsetDateTime = date.toInstant() .atOffset(ZoneOffset.UTC);

Wenn das ursprüngliche Datum nicht in UTC ist, können wir den Offset bereitstellen (in einem Hilfsobjekt gespeichert, da die Date-Klasse, wie bereits erwähnt, keine Zeitzonen speichern kann).

Nehmen wir an, unser ursprüngliches Datum ist +3: 30 (Teheraner Zeit):

int hour = 3; int minute = 30; offsetDateTime = date.toInstant() .atOffset(ZoneOffset.ofHoursMinutes(hour, minute));

OffsetDateTime bietet viele nützliche Methoden, die anschließend verwendet werden können. Zum Beispiel können wir einfach getDayOfWeek () , getDayOfMonth () und getDayOfYear (). Es ist auch sehr einfach , zwei OffsetDateTime Objekte mit vergleichen isAfter und isBefore Methoden.

Vor allem empfiehlt es sich, die veraltete Date- Klasse vollständig zu vermeiden .

4. Fazit

In diesem Tutorial haben wir gelernt, wie einfach es ist, von Date nach OffsetDateTime zu konvertieren .

Und wie immer ist der Code auf Github verfügbar.