Java 8 - Преобразование LocalDate в ZonedDateTime

Я новичок в пакете java.time. У меня есть LocalDate 2015-12-10. Мне нужно преобразовать это в ZonedDateTime. Время должно быть 00:00:00, а Zone - ZoneOffset.UTC.

После преобразования ZonedDateTime должен быть 2015-12-10T00: 00: 00 + 02: 00.

Я сохраняю LocalDate в переменной, называемой startDate.

Я пытался:

ZonedDateTime.ofInstant(Instant.from(startDate), ZoneOffset.UTC)

но получить ошибку

java.time.DateTimeException: невозможно получить мгновенное из TemporalAccessor: 2015-12-10 типа java.time.LocalDate]

Я также пробовал:

startDate.atStartOfDay().atZone(ZoneOffset.UTC)

Это дает неожиданные результаты.

Я просмотрел API и попробовал несколько других методов, но пока не повезло.

Есть ли другой способ конвертировать LocalDate в ZonedDateTime?

Ответы

Ответ 1

При преобразовании менее конкретных объектов в более конкретные, используйте методы "at":

ZonedDateTime zdt = startDate.atStartOfDay(ZoneOffset.UTC);

Однако переход в UTC-смещение не приведет к результату +02: 00, что предполагает, что вы пытаетесь достичь чего-то еще.

Ответ 2

Я полагаю, что проблема больше не актуальна, а для целей Google:

  LocalDate localDate = LocalDate.parse("2017-07-22");      
  ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
  // => 2017-07-22T00:00+05:30[Asia/Kolkata]

источник https://beginnersbook.com/2017/10/java-convert-localdate-to-zoneddatetime/