Вы можете создать DateTimeFormatter со сложным шаблоном с помощью DateTimeFormatterBuilder :
Например, для разбора yyyyMM
, yyyy-MM
и yyyy MM
вы можете использовать:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR_OF_ERA, 4)
.optionalStart().appendLiteral('-').optionalEnd()
.optionalStart().appendLiteral(' ').optionalEnd()
.appendValue(ChronoField.MONTH_OF_YEAR, 2)
.toFormatter();
Но этот формат также строг, потому что год и месяц имеют фиксированную ширину, иначе необязательные литералы не работают.
Вы можете добавить .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
, чтобы просто проанализировать LocalDate.