¿Cómo puedo crear una fecha local de Java 8 a partir de una época larga en milisegundos?
Tengo una API externa que me devuelve fechas como long
s, representadas como milisegundos desde el comienzo de la Época.
Con la API de Java de estilo antiguo, simplemente construiría una Date
a partir de ella con
Date myDate = new Date(startDateLong)
¿ Cuál es el equivalente en las clases LocalDate
/ de Java 8 LocalDateTime
?
Estoy interesado en convertir el punto en el tiempo representado por a long
en LocalDate
mi zona horaria local actual.
Si tiene los milisegundos desde la Época y desea convertirlos a una fecha local usando la zona horaria local actual, puede usarInstant.ofEpochMilli(long epochMilli)
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
pero tenga en cuenta que incluso la zona horaria predeterminada del sistema puede cambiar, por lo que el mismo long
valor puede producir resultados diferentes en ejecuciones posteriores, incluso en la misma máquina.
Además, tenga en cuenta que LocalDate
, a diferencia de java.util.Date
, en realidad representa una fecha, no una fecha y hora.
De lo contrario, puede utilizar un LocalDateTime
:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
Puedes comenzar con Instant.ofEpochMilli(long) :
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();