Как я могу создать Java 8 LocalDate из длинного периода Epoch в миллисекундах?
У меня есть внешний API, возвращающий мне даты как long
s, представленные как миллисекунды с эпохи.
С помощью Java API старого стиля я бы просто построил Date
из него с помощью
Date myDate = new Date(startDateLong)
Что такое эквивалент в Java 8 LocalDate
/LocalDateTime
classes?
Я заинтересован в преобразовании точки во времени, представленной длинной в LocalDate
в моем текущем локальном часовом поясе.
Ответы
Ответ 1
Если у вас есть миллисекунды с эпохи и хотите преобразовать их в локальную дату с использованием текущего локального часового пояса, вы можете использовать
LocalDate date =
Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
но имейте в виду, что даже временная зона по умолчанию для систем может меняться, поэтому одно и то же значение long
может давать разные результаты в последующих прогонах даже на одном компьютере.
Кроме того, имейте в виду, что LocalDate
, в отличие от java.util.Date
, действительно представляет дату, а не дату и время.
В противном случае вы можете использовать LocalDateTime
:
LocalDateTime date =
LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
Ответ 2
Вы можете начать с Instant.ofEpochMilli(long):
LocalDate date =
Instant.ofEpochMilli(startDateLong)
.atZone(ZoneId.systemDefault())
.toLocalDate();
Ответ 3
Временные метки и прочее, очень простая альтернатива new Date(startDateLong)
может быть LocalDate.ofEpochDay(startDateLong / 86400000L)