DateTimeFormatter не может анализировать дату ISO на основе week_OF_WEEK_BASED_YEAR

Я определяю средство форматирования следующим образом:

private static final DateTimeFormatter FORMATTER =
  new DateTimeFormatterBuilder()
      .parseCaseInsensitive()
      .appendLiteral("y")
      .appendValue(IsoFields.WEEK_BASED_YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
      .appendLiteral("w")
      .appendValue(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 2)
      .toFormatter();

Я ввожу следующие строки, которые, как я считаю, должны быть действительными, используя следующий вызов синтаксического анализа:

LocalDate.parse(inputString, FORMATTER).atStartOfDay()

Со следующими значениями inputString:

  • y2019w52
  • y2020w01
  • y2019w03

Все выдают ошибки синтаксического анализа, например:

Текст «y2019w03» не может быть проанализирован: невозможно получить LocalDate из TemporalAccessor: {WeekOfWeekBasedYear=3, WeekBasedYear=2019}, ISO типа java.time.format.Parsed

Любые идеи?


person 75inchpianist    schedule 23.06.2021    source источник
comment
Вам нужно добавить .parseDefaulting(ChronoField.DAY_OF_WEEK, 1) в цепочку DateTimeFormatterBuilder.   -  person Andreas    schedule 23.06.2021