variable manejo horas fechas fecha example ejemplo declarar crear java datetime java-8 java-time

horas - manejo de fechas en java



¿Cómo puedo crear un Java 8 LocalDate a partir de una larga época en milisegundos? (5)

Tengo una API externa que me devuelve fechas tan long , representadas como milisegundos desde Epoch.

Con la API de Java de estilo antiguo, simplemente construiría una Date partir de ella con

Date myDate = new Date(startDateLong)

¿Cuál es el equivalente en las clases LocalDate / LocalDateTime Java 8?

Estoy interesado en convertir el punto en el tiempo representado por el largo a LocalDate en mi zona horaria local actual.


Creo que tengo una mejor respuesta.

new Timestamp(longEpochTime).toLocalDateTime();


Dejando a un lado las LocalDate.ofEpochDay(startDateLong / 86400000L) y otras cosas, una alternativa muy simple a la new Date(startDateLong) podría ser LocalDate.ofEpochDay(startDateLong / 86400000L)


En un caso específico donde la marca de tiempo de los segundos de la época proviene de SQL o está relacionada con SQL de alguna manera, puede obtenerla así:

long startDateLong = <...> LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();


Puede comenzar con Instant.ofEpochMilli(long) :

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


Si tiene los milisegundos desde la época y desea convertirlos a una fecha local utilizando 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 tanto, el mismo valor long 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 , realmente representa una fecha, no una fecha y hora.

De lo contrario, puede usar un LocalDateTime :

LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());