
Vihung
Tengo una API externa que me devuelve fechas como long
s, representado como milisegundos desde el comienzo de la Época.
Con la API de Java de estilo antiguo, simplemente construiría un Date
de eso con
Date myDate = new Date(startDateLong)
¿Cuál es el equivalente en Java 8’s? LocalDate
/LocalDateTime
clases?
Estoy interesado en convertir el punto en el tiempo representado por el long
a un LocalDate
en mi zona horaria local actual.

Holger
Si tiene los milisegundos desde la Época y quiere convertirlos a una fecha local usando la zona horaria local actual, puede usar
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 la misma long
El valor puede producir resultados diferentes en ejecuciones posteriores, incluso en la misma máquina.
Además, ten en cuenta que LocalDate
, a diferencia de java.util.Date
, realmente 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 empezar con Instant.ofEpochMilli(largo):
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
Creo que tengo una mejor respuesta.
new Timestamp(longEpochTime).toLocalDateTime();
Zonas horarias y cosas aparte, una alternativa muy simple a new Date(startDateLong)
podría ser LocalDate.ofEpochDay(startDateLong / 86400000L)

Santhosh Hirekerur
reemplace now.getTime() con su valor largo.
//GET UTC time for current date
Date now= new Date();
//LocalDateTime utcDateTimeForCurrentDateTime = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDateTime();
LocalDate localDate = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDate();
DateTimeFormatter dTF2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println(" formats as " + dTF2.format(utcDateTimeForCurrentDateTime));

M. Prójorov
En un caso específico en el que su marca de tiempo de segundos de época proviene de SQL o está relacionada con SQL de alguna manera, puede obtenerla de esta manera:
long startDateLong = <...>
LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();
.
Bueno, tienes que empezar por averiguar qué zona horaria te interesa. Un valor de “milisegundos desde la época” le brinda un instante en el tiempo… que podría referirse a diferentes fechas en diferentes zonas horarias. Tener en cuenta que
java.util.Date
nunca fue realmente una cita en la forma en queLocalDate
es – fue un instante en el tiempo también.– Jon Skeet
03 feb.
Consulte esta pregunta: stackoverflow.com/questions/21242110/…, que cubre la conversión de
java.util.Date
enLocalDate
– hotzst
03 feb.
Nota: estas preguntas y respuestas también son valiosas para aquellos que intentan convertir
File.lastModified()
(época milis) aLocalDate(Time)
.– Kevinarpe
27 mar. 17 a las 09:27
¿Responde esto a tu pregunta? Cómo obtener milisegundos de LocalDateTime en Java 8
– Georgios Syngouroglou
09 feb. 21 en 08:41
@GeorgeSiggouroglou Esa pregunta hace lo contrario de esta pregunta, por lo que no es un duplicado.
– Mark Rotteveel
09 feb. 21 en 11:13