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, вместо этого у вас есть пробел.

После этой проблемы у вас может возникнуть проблема с тем, что ваша строка содержит имя часового пояса в дополнение к смещению, о котором ваш форматер не был проинформирован.

Как говорится в другом ответе, эти проблемы можно исправить, просто полагаясь на парсеры по умолчанию, так как они понимают этот формат.

Другие вопросы по тегам