Ich habe eine externe API, die Datumsangaben als long
s zurückgibt, die seit Epoche als Millisekunden dargestellt werden.
Mit der alten Java-API konstruiere ich einfach eine Date
mit
Date myDate = new Date(startDateLong)
Was ist das Äquivalent in den LocalDate
/LocalDateTime
-Klassen von Java 8?
Ich bin daran interessiert, den von long angegebenen Zeitpunkt in eine LocalDate
in meiner aktuellen lokalen Zeitzone umzuwandeln.
Wenn Sie seit der Epoche Millisekunden haben und diese mit der aktuellen lokalen Zeitzone in ein lokales Datum konvertieren möchten, können Sie dies verwenden
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
denken Sie jedoch daran, dass sich auch die Standardzeitzone des Systems ändern kann. Daher kann derselbe long
-Wert in nachfolgenden Läufen zu unterschiedlichen Ergebnissen führen, selbst auf demselben Computer.
Beachten Sie außerdem, dass LocalDate
im Gegensatz zu Java.util.Date
wirklich ein Datum und nicht Datum und Uhrzeit darstellt.
Ansonsten können Sie eine LocalDateTime
verwenden:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
Sie können mit Instant.ofEpochMilli (long) beginnen:
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
Ich denke, ich habe eine bessere Antwort.
new Timestamp(longEpochTime).toLocalDateTime();
Zeitzonen und so weiter, eine sehr einfache Alternative zu new Date(startDateLong)
könnte LocalDate.ofEpochDay(startDateLong / 86400000L)
sein
In einem bestimmten Fall, in dem Ihr Zeitstempel für die Epoche in Sekunden von SQL stammt oder irgendwie mit SQL zusammenhängt, können Sie ihn folgendermaßen erhalten:
long startDateLong = <...>
LocalDate theDate = new Java.sql.Date(startDateLong).toLocalDate();