InstantКласс представляет собой мгновенную точку на временной линии. Преобразование в и из LocalDateтребует часового пояса. В отличие от некоторых других библиотек даты и времени, JSR-310 не выбирает часовой пояс автоматически, поэтому вы должны указать его.
LocalDate date =LocalDate.now();Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
В этом примере используется часовой пояс JVM по умолчанию - ZoneId.systemDefault()- для выполнения преобразования. См. Здесь более подробный ответ на связанный вопрос.
Обновление: принятый ответ использует LocalDateTime::toInstant(ZoneOffset)только тот, который принимает ZoneOffset. Этот ответ использует LocalDate::atStartOfDay(ZoneId)который принимает любые ZoneId. Таким образом, этот ответ обычно более полезен (и, вероятно, должен быть принятым).
Я думаю, что это более полезно, чем принятый ответ, поскольку ZoneId (часовой пояс) является параметром, а не ZoneOffset (часы, сдвинутые с UTC, которые могут меняться для часового пояса летом / зимой).
wuerg
1
В модульном тесте, который я пишу, у меня есть LocalDate, который преобразуется в com.google.protobuf.Timestamp, а затем отображается обратно в LocalDate через Instant в обоих направлениях. При использовании подхода, предлагаемого принятым ответом, я получаю взамен ожидаемую LocalDate, но при использовании этого подхода я получаю «вчера» вместо «сегодня». Мой часовой пояс GMT + 1
Nadrendion
128
Чтобы преобразовать его в мгновение, вам необходимо иметь экземпляр LocalDateTime, например:
LocalDate
не включает время.Ответы:
Instant
Класс представляет собой мгновенную точку на временной линии. Преобразование в и изLocalDate
требует часового пояса. В отличие от некоторых других библиотек даты и времени, JSR-310 не выбирает часовой пояс автоматически, поэтому вы должны указать его.В этом примере используется часовой пояс JVM по умолчанию -
ZoneId.systemDefault()
- для выполнения преобразования. См. Здесь более подробный ответ на связанный вопрос.Обновление: принятый ответ использует
LocalDateTime::toInstant(ZoneOffset)
только тот, который принимаетZoneOffset
. Этот ответ используетLocalDate::atStartOfDay(ZoneId)
который принимает любыеZoneId
. Таким образом, этот ответ обычно более полезен (и, вероятно, должен быть принятым).PS. Я был основным автором API
источник
Чтобы преобразовать его в мгновение, вам необходимо иметь экземпляр LocalDateTime, например:
источник