java.time.format.DateTimeParseException с использованием DateTimeFormatter
У меня есть этот код:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern(DateType.DATE_FORMAT)
.appendOffset("+HH:mm", "+00:00")
.toFormatter();
ZonedDateTime.parse("2018-06-09T14:09:30.020+03:00[Europe/Tallinn]", formatter);
DateType.java
:
public class DateType {
public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_TIME_ZONE_FORMAT = DATE_FORMAT + "XXX";
}
Но я запускаю этот код, у меня ошибка:
java.time.format.DateTimeParseException: Text '2018-06-09T14:09:30.020+03:00[Europe/Tallinn]' could not be parsed at index 10
Насколько я понимаю, это из-за форматера. Что может быть не так?
2 ответа
Интересно, почему вы не попробовали парсер по умолчанию. Я думаю, что это работает, как ожидалось.
String dateTime = "2018-06-09T14:09:30.020+03:00[Europe/Tallinn]";
ZonedDateTime z = ZonedDateTime.parse(dateTime);
System.out.println(z);
Что может быть не так?
Я бы сказал, что вы найдете в индексе 10, как говорится в сообщении об ошибке. Т - то, что не так. Поскольку вы никогда не упоминали ни одного в своем DATE_FORMAT, вместо этого у вас есть пробел.
После этой проблемы у вас может возникнуть проблема с тем, что ваша строка содержит имя часового пояса в дополнение к смещению, о котором ваш форматер не был проинформирован.
Как говорится в другом ответе, эти проблемы можно исправить, просто полагаясь на парсеры по умолчанию, так как они понимают этот формат.