Я работаю с новым API DateTime Java 8.
Как преобразовать LocalDate в Instant? Я получаю исключение с
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
и я не понимаю почему.
Я работаю с новым API DateTime Java 8.
Как преобразовать LocalDate в Instant? Я получаю исключение с
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
и я не понимаю почему.
Ответы:
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
. Таким образом, этот ответ обычно более полезен (и, вероятно, должен быть принятым).
PS. Я был основным автором API
Чтобы преобразовать его в мгновение, вам необходимо иметь экземпляр LocalDateTime, например:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
не включает время.