tl; dr
ZonedDateTime.now(
ZoneId.of( "America/Montreal" )
)
… Der aktuellen Standardzeitzone…
ZonedDateTime.now(
ZoneId.systemDefault()
)
Einzelheiten
Die Antwort von Stanislav Bshkyrtsev beantwortet Ihre Frage richtig und direkt.
Es gibt jedoch größere Probleme, wie in der Antwort von Jon Skeet vorgeschlagen .
LocalDateTime
Ich finde keine Möglichkeit, die zweite Epoche in LocalDateTime umzuwandeln
LocalDateTime
hat absichtlich kein Konzept der Zeitzone oder des Versatzes von UTC. Nicht wahrscheinlich, was Sie wollen. Das Local…
bedeutet jeden Ort, keinen bestimmten Ort. Diese Klasse repräsentiert keinen Moment, sondern nur potenzielle Momente in einem Bereich von etwa 26 bis 27 Stunden (dem Bereich der Zeitzonen rund um den Globus).
Instant
Sie müssen nicht mit Sekunden beginnen, wenn Sie versuchen, die aktuelle Zeit abzurufen. Holen Sie sich den aktuellen Instant
. Die Instant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).
Instant instant = Instant.now();
Darin Instant
befindet sich eine Anzahl von Nanosekunden aus der Epoche. Aber das interessiert uns nicht wirklich.
ZonedDateTime
Wenn Sie diesen Moment durch die Linse der Wanduhrzeit einer bestimmten Region sehen möchten, wenden Sie a ZoneId
an , um a zu erhalten ZonedDateTime
.
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdt = instant.atZone( z );
Als Abkürzung können Sie direkt auf die ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.now( z );
A ZonedDateTime
hat ein Instant
in sich. Rufen Sie zdt.toInstant()
an, um den gleichen Zeitpunkt wie einen Grundwert in UTC zu erhalten . Gleiche Anzahl von Nanosekunden seit der Epoche, entweder als ZonedDateTime
oder als Instant
.
Sekunden seit der Epoche gegeben
Wenn Sie eine Anzahl von Sekunden seit der Epoche erhalten und die Epoche der erste Moment von 1970 in UTC ( 1970-01-01T00:00:00Z
) ist, geben Sie diese Zahl an ein Instant
.
long secondsSinceEpoch = 1_484_063_246L ;
Instant instant = Instant.ofEpochSecond( secondsSinceEpoch ) ;
Ü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 Strings, 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 .
import java.time.{Instant, LocalDateTime, ZoneId, ZoneOffset}
funktioniert? Es ist einunexpected token
für mich in Java 11.