Невозможно проанализировать пользовательскую дату Java: можно ли установить год по умолчанию?

DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
                    .appendPattern("h:mm a z - d MMMM")
                    .toFormatter()
                    .withLocale(Locale.US);

            String test = "7:00 PM EST - 14 April";
LocalDateTime date2 = LocalDateTime.parse(test, formatter2);

Выдает это исключение

java.time.format.DateTimeParseException: текст «19:00 EST — 14 апреля» не может быть проанализирован: невозможно получить LocalDateTime из TemporalAccessor: {DayOfMonth=14, MonthOfYear=4},ISO,Америка/Нью-Йорк разрешено до 19:00 типа java.time.format.Parsed

Но вы можете видеть, что он правильно разобрал все компоненты. В чем проблема?

Какой год?

aled 17.04.2023 18:34

@aled ой! Могу ли я установить год по умолчанию?

erotsppa 17.04.2023 18:55

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

Basil Bourque 18.04.2023 04:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что для создания LocalDateTime требуется наличие года, а для строки времени — нет.

Вы можете указать DateTimeFormatterBuilder по умолчанию какое-то значение, если какой-то элемент отсутствует, используя parseDefaulting.

DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
    .parseDefaulting(ChronoField.YEAR, 2023)
    .appendPattern("h:mm a z - d MMMM")
    .toFormatter()
    .withLocale(Locale.US);

Извините моя ошибка. Должно быть ChronoField.

MC Emperor 17.04.2023 19:44

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