2015-08-14 2 views
13

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

После преобразования 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

Почему вы ожидаете, что смещение зоны будет +02: 00? – Misha

+1

Если вы хотите использовать ZonedDateTime, вам потребуется ZoneId. Не только ZoneOffset. И ваш вопрос не имеет большого смысла. Сначала вы говорите, что хотите его в часовой пояс UTC, а затем вы говорите, что это должно быть 2015-12-10T00: 00: 00 + 02: 00. Если это +02: 00, это не UTC. UTC +00: 00. Если вам нужно время с фиксированным смещением UTC, вы должны использовать OffsetDateTime: 'OffsetDateTime offsetDateTimeDateTime = date.atStartOfDay(). AtOffset (ZoneOffset.ofHours (2));' –

+1

Мои извинения: ZoneOffset расширяет ZoneId, поэтому который вернет вам ZonedDateTime. Остальная часть моего комментария все еще стоит. –

ответ

24

При преобразовании менее конкретных объектов к более конкретным из них, использовать «на» методы:

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

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