У меня есть следующий форматтер:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyyMM")
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.YEAR, ZonedDateTime.now().getYear())
.toFormatter()
.withZone(ZoneId.systemDefault());
Я пытаюсь разобрать строку "201505"
System.out.println(ZonedDateTime.parse("201505", formatter));
и генерирует исключение:
Вызвано: java.time.DateTimeException: обнаружен конфликт: Год 2016 отличается от 2015 года
Он работает, если я прокомментирую настройку значения по умолчанию для YEAR.
Насколько я понял документацию, он должен только попытаться заменить значение по умолчанию, если нет синтаксического анализа. Кажется, это работает в течение месяца, так как у меня разный месяц, чем по умолчанию. Однако это не работает в течение года.
Я использую это неправильно, может ли кто-нибудь сказать мне, есть ли другой способ определить значения по умолчанию для полей, которые могут отсутствовать в шаблоне?