tl; dr
Verwenden Sie java.time.Instant
class, um Text im Standardformat ISO 8601 zu analysieren, der einen Moment in UTC darstellt.
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Dieses Format ist in der Norm ISO 8601 für Datums- und Uhrzeitzeichenfolgenformate definiert.
Beide:
… Verwenden standardmäßig ISO 8601-Formate zum Parsen und Generieren von Zeichenfolgen.
Sie sollten generell vermeiden, die alten Klassen java.util.Date /.Calendar & java.text.SimpleDateFormat zu verwenden, da diese notorisch problematisch, verwirrend und fehlerhaft sind. Bei Bedarf für die Zusammenarbeit können Sie hin und her konvertieren.
java.time
In Java 8 und höher ist das neue java.time- Framework integriert. Inspiriert von Joda-Time , definiert durch JSR 310 und erweitert durch das ThreeTen-Extra- Projekt.
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
In die alte Klasse konvertieren.
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
Zeitzone
Bei Bedarf können Sie eine Zeitzone zuweisen.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Define a time zone rather than rely implicitly on JVM’s current default time zone.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); // Assign a time zone adjustment from UTC.
Konvertieren.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda-Zeit
UPDATE: Das Joda-Time-Projekt befindet sich jetzt im Wartungsmodus. Das Team empfiehlt die Migration zu den Klassen java.time .
Hier ist ein Beispielcode in Joda-Time 2.8.
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC ); // Specifying a time zone to apply, rather than implicitly assigning the JVM’s current default.
In alte Klasse konvertieren. Beachten Sie, dass die zugewiesene Zeitzone bei der Konvertierung verloren geht, da juDate keine Zeitzone zugewiesen werden kann.
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
Zeitzone
Bei Bedarf können Sie eine Zeitzone zuweisen.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
Ü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
.
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
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.
Woher bekomme ich die java.time-Klassen?
- Java SE 8 , Java SE 9 und höher
- Eingebaut.
- Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 und Java SE 7
- Android
- Spätere Versionen von Android-Bundle-Implementierungen der Klassen java.time.
- Für frühere Android -Geräte ( <26) passt das ThreeTenABP- Projekt ThreeTen-Backport (oben erwähnt) an. Siehe Verwendung von ThreeTenABP… .
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval
, YearWeek
, YearQuarter
, und mehr .