it-swarm.com.ru

Как конвертировать LocalDate в мгновенное?

Я работаю с новым API DateTime Java 8.

Как конвертировать LocalDate в мгновенное? Я получаю исключение с

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

и я не понимаю почему.

79
user1643352

Чтобы преобразовать его в мгновение, вам нужен экземпляр LocalDateTime, например:

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
100
mdo

Класс 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

59
JodaStephen