tl; dr
Instant.now()
java.time
Die problematischen alten Datums- und Uhrzeitklassen , die mit den frühesten Versionen von Java gebündelt wurden, wurden durch die in Java 8 und höher integrierten java.time- Klassen ersetzt. Siehe Oracle Tutorial . Ein Großteil der Funktionen wurde in ThreeTen-Backport auf Java 6 & 7 zurückportiert und in ThreeTenABP weiter an Android angepasst .
Instant
An Instant
repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von bis zu Nanosekunden .
Instant instant = Instant.now();
Die toString
Methode generiert ein String-Objekt mit Text, der den Datums- / Uhrzeitwert darstellt, unter Verwendung eines der Standardformate ISO 8601 .
String output = instant.toString();
2016-06-27T19: 15: 25.864Z
Die Instant
Klasse ist eine grundlegende Bausteinklasse in java.time. Dies sollte Ihre erste Adresse beim Umgang mit Datum und Uhrzeit sein, da im Allgemeinen die beste Vorgehensweise darin besteht, Datums- und Uhrzeitwerte in UTC zu verfolgen, zu speichern und auszutauschen.
OffsetDateTime
Es Instant
gibt jedoch Einschränkungen, z. B. keine Formatierungsoptionen zum Generieren von Zeichenfolgen in alternativen Formaten. Konvertieren Sie für mehr Flexibilität von Instant
nach OffsetDateTime
. Geben Sie einen Versatz von UTC an . In java.time bedeutet das ein ZoneOffset
Objekt. Hier wollen wir bei UTC (+00) bleiben, damit wir die bequeme Konstante verwenden können ZoneOffset.UTC
.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
2016-06-27T19: 15: 25.864Z
Oder überspringen Sie die Instant
Klasse.
OffsetDateTime.now( ZoneOffset.UTC )
Mit einem OffsetDateTime
Objekt in der Hand können Sie jetzt DateTimeFormatter
String-Objekte mit Text in alternativen Formaten erstellen. Durchsuchen Sie den Stapelüberlauf nach vielen Anwendungsbeispielen DateTimeFormatter
.
ZonedDateTime
Wenn Sie anzeigen möchten , Wand-Uhr Zeit für einige bestimmte Zeitzone, gilt eine ZoneId
eine zu bekommen ZonedDateTime
.
In diesem Beispiel wenden wir die Zeitzone Montréal an. Im Sommer hat die Zone unter dem Unsinn der Sommerzeit (DST) einen Versatz von -04:00
. So Kenntnis , wie die Zeit-of-Tag vier Stunden zuvor in der Ausgabe, 15
statt 19
Stunden. Instant
und ZonedDateTime
beide repräsentieren den gleichen gleichzeitigen Moment, nur durch zwei verschiedene Linsen betrachtet.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
2016-06-27T15: 15: 25.864-04: 00 [Amerika / Montreal]
Konvertieren
Während Sie die alten Datums- / Uhrzeitklassen vermeiden sollten, können Sie bei Bedarf mit neuen Methoden konvertieren, die zu den alten Klassen hinzugefügt wurden. Hier verwenden wir java.util.Date.from( Instant )
und java.util.Date::toInstant
.
java.util.Date utilDate = java.util.Date.from( instant );
Und in die andere Richtung gehen.
Instant instant= utilDate.toInstant();
Suchen Sie in ähnlicher Weise nach neuen Methoden, die zu GregorianCalendar
(Unterklasse von Calendar
) hinzugefügt wurden , um von und nach zu konvertieren java.time.ZonedDateTime
.
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für java.sql.*
Klassen. Hibernate 5 und JPA 2.2 unterstützen java.time .
Woher bekomme ich die java.time-Klassen?
java.util.Date
ist niemals ein lokales Maschinendatum. Es wird seit 1970-01-01 relativ zu UTC + 00: 00 immer als verstrichene Millisekunden definiert. VielleichttoString()
verwirrt Sie das Verhalten seiner Methode , die tatsächlich eine Darstellung in der lokalen Zeitzone verwendet.