¿Cómo puedo crear una fecha local de Java 8 a partir de una época larga en milisegundos?

Resuelto Vihung asked hace 8 años • 9 respuestas

Tengo una API externa que me devuelve fechas como longs, representadas como milisegundos desde el comienzo de la Época.

Con la API de Java de estilo antiguo, simplemente construiría una Datea 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 longen LocalDatemi zona horaria local actual.

Vihung avatar Feb 03 '16 23:02 Vihung
Aceptado

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 longvalor 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());
Holger avatar Feb 03 '2016 20:02 Holger

Puedes comenzar con Instant.ofEpochMilli(long) :

LocalDate date =
  Instant.ofEpochMilli(startDateLong)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();
Meno Hochschild avatar Feb 03 '2016 20:02 Meno Hochschild