#java
Вопрос:
import java.time.ZonedDateTime;
public class ZonedDateTimeExample1{
public static void main(String[] args) {
ZonedDateTime zone = ZonedDateTime.parse("2016-10-05T08:20:10");
System.out.println(zone);
}
}
Это приводит к
Ошибка преобразования строки в дату
Это String
без часового пояса. Как преобразовать его в ZonedDateTime
с добавлением часового пояса UTC.
Пожалуйста, дайте мне знать, почему часовой пояс по умолчанию не принимает ZonedDateTime.parse
Попадание ниже исключения:
Exception in thread "main" java.time.format.DateTimeParseException: Text 2016-10-05T08:20:10 could not be parsed at index 19
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:582)
at ZonedDateTimeExample1.main(ZonedDateTimeExample1.java:4)
Комментарии:
1. Где в этом зона
String
? Дата-время, которое вы пытаетесь проанализировать, не имеет зоны или смещения. Вам придется использоватьLocalDateTime.parse(...)
здесь, а затем прикрепить зону.
Ответ №1:
TL;DR См. код:
public static void main(String[] args) throws Exception {
ZonedDateTime zone = LocalDateTime.parse("2016-10-05T08:20:10")
.atZone(ZoneId.of("Etc/UTC"));
System.out.println(zone);
}
Вы не можете напрямую анализировать a String
, у которого нет часового пояса для a ZonedDateTime
. Вы должны проанализировать его в LocalDateTime
(дату и время дня без смещения или зоны), а затем присоединить зону.
В качестве альтернативы вы можете использовать ZoneId
с DateTimeFormatter
самим собой, например
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME
.withZone(ZoneId.of("Etc/UTC"));
ZonedDateTime zdt = ZonedDateTime.from(dtf.parse("2016-10-05T08:20:10"));
System.out.println(zdt);
}