it-swarm.com.de

Wie kann ich ein Java 8 LocalDate aus einer langen Epoche in Millisekunden erstellen?

Ich habe eine externe API, die Datumsangaben als longs 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.

138
Vihung

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());
265
Holger

Sie können mit Instant.ofEpochMilli (long) beginnen:

LocalDate date =
  Instant.ofEpochMilli(startDateLong)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();
25
Meno Hochschild

Ich denke, ich habe eine bessere Antwort. 

new Timestamp(longEpochTime).toLocalDateTime();
8
Abhijeet

Zeitzonen und so weiter, eine sehr einfache Alternative zu new Date(startDateLong) könnte LocalDate.ofEpochDay(startDateLong / 86400000L) sein

3
Michael Piefel

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();
0
M. Prokhorov