Как я могу создать Java 8 LocalDate из долгого времени эпохи в миллисекундах?



у меня есть внешний API возвращает мне даты как longs, представленный как миллисекунды с эпохи.



со старым стилем Java API, я бы просто построить Date С



Date myDate = new Date(startDateLong)


что такое эквивалент в Java 8's LocalDate/LocalDateTime классы?



Я заинтересован в преобразовании точки во времени, представленной длинной в LocalDate в моем текущем часовом поясе.

640   4  

4 ответов:

если у вас есть миллисекунды с момента эпохи и вы хотите преобразовать их в локальную дату, используя текущий локальный часовой пояс, вы можете использовать

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

но имейте в виду, что даже часовой пояс системы по умолчанию может измениться, таким образом, то же самое long значение может привести к различным результатам в последующих запусках, даже на той же машине.

далее, имейте в виду, что LocalDate В отличие от java.util.Date, действительно представляет дату, а не дату и время.

в противном случае, вы можете использовать а LocalDateTime:

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

вы можете начать с мгновенный.офепочмилли (долго):

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

Я думаю, что у меня есть лучший ответ.

new Timestamp(longEpochTime).toLocalDateTime();

часовые пояса и прочее в сторону, очень простая альтернатива new Date(startDateLong) может быть LocalDate.ofEpochDay(startDateLong / 86400000L)

Comments

    Ничего не найдено.