tl; dr
In UTC :
Instant.now().minus( 1 , ChronoUnit.HOURS )
Oder in Zonen unterteilt:
Instant.now()
.atZone( ZoneId.of ( "America/Montreal" ) )
.minusHours( 1 )
Mit java.time
In Java 8 und höher ist das neue Java.time- Framework integriert.
Instant
Wenn Sie sich nur für UTC (GMT) interessieren, verwenden Sie die Instant
Klasse.
Instant instant = Instant.now ();
Instant instantHourEarlier = instant.minus ( 1 , ChronoUnit.HOURS );
Zur Konsole werfen.
System.out.println ( "instant: " + instant + " | instantHourEarlier: " + instantHourEarlier );
Augenblick: 2015-10-29T00: 37: 48.921Z | instantHourEarlier: 2015-10-28T23: 37: 48.921Z
Beachten Sie, wie in diesem Moment zum gestrigen Datum zurückgekehrt wurde.
ZonedDateTime
Wenn Sie sich für eine Zeitzone interessieren, verwenden Sie die ZonedDateTime
Klasse. Sie können mit einem Instant beginnen und eine Zeitzone, ein ZoneId
Objekt, zuweisen . Diese Klasse behandelt die erforderlichen Anpassungen für Anomalien wie Sommerzeit (DST) .
Instant instant = Instant.now ();
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
ZonedDateTime zdtHourEarlier = zdt.minus ( 1 , ChronoUnit.HOURS );
Zur Konsole werfen.
System.out.println ( "instant: " + instant + "\nzdt: " + zdt + "\nzdtHourEarlier: " + zdtHourEarlier );
Augenblick: 2015-10-29T00: 50: 30.778Z
zdt: 2015-10-28T20: 50: 30.778-04: 00 [Amerika / Montreal]
zdtHourEarlier: 2015-10-28T19: 50: 30.778-04: 00 [Amerika / Montreal]
Umwandlung
Die alten Klassen java.util.Date/.Calendar sind jetzt veraltet. Vermeide sie. Sie sind notorisch lästig und verwirrend.
Wenn Sie die alten Klassen für den Betrieb mit altem Code verwenden müssen, der für die java.time-Typen noch nicht aktualisiert wurde, rufen Sie die Konvertierungsmethoden auf. Hier ist ein Beispielcode, der von einem Instant oder einem ZonedDateTime zu einem java.util.Date wechselt.
java.util.Date date = java.util.Date.from( instant );
…oder…
java.util.Date date = java.util.Date.from( zdt.toInstant() );
Ü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?
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 .
mktime
Gibt es ein Äquivalent in Java? 60 Minuten davon abziehen?