J'ai une API externe qui me renvoie les dates sous la forme long
s, exprimées en millisecondes depuis Epoch.
Avec l'ancienne API Java, je construirais simplement une Date
à partir de celle-ci avec
Date myDate = new Date(startDateLong)
Quel est l'équivalent dans les classes LocalDate
/LocalDateTime
de Java 8?
Je suis intéressé par la conversion du moment indiqué par le long en un LocalDate
dans mon fuseau horaire local actuel.
Si vous avez les millisecondes depuis l’époque et que vous voulez les convertir en date locale en utilisant le fuseau horaire local actuel, vous pouvez utiliser
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
cependant, gardez à l’esprit que même le fuseau horaire par défaut du système peut changer. Ainsi, la même valeur long
peut produire un résultat différent lors des exécutions suivantes, même sur le même ordinateur.
De plus, gardez à l'esprit que LocalDate
, contrairement à Java.util.Date
, représente réellement une date, et non une date et une heure.
Sinon, vous pouvez utiliser une LocalDateTime
:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
Vous pouvez commencer par Instant.ofEpochMilli (long) :
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
Je pense avoir une meilleure réponse.
new Timestamp(longEpochTime).toLocalDateTime();
Les fuseaux horaires et les choses de côté, une alternative très simple à new Date(startDateLong)
pourrait être LocalDate.ofEpochDay(startDateLong / 86400000L)
Dans un cas spécifique où votre horodatage Epoch secondes provient de SQL ou est lié à SQL, vous pouvez l'obtenir comme suit:
long startDateLong = <...>
LocalDate theDate = new Java.sql.Date(startDateLong).toLocalDate();