Ответ 1
DateTimeFormatter
по умолчанию строгие и чувствительные к регистру. Используйте DateTimeFormatterBuilder
и укажите parseCaseInsensitive()
для анализа без учета регистра.
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("yy-MMM-dd")
.toFormatter(Locale.US);
Чтобы иметь возможность анализировать числовые месяцы (т.е. "15-01-12"
), вам также необходимо указать parseLenient()
.
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseLenient()
.appendPattern("yy-MMM-dd")
.toFormatter(Locale.US);
Вы также можете быть более подробным, чтобы указать только месячную часть как нечувствительную к регистру/снисходительность:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yy-")
.parseCaseInsensitive()
.parseLenient()
.appendPattern("MMM")
.parseStrict()
.parseCaseSensitive()
.appendPattern("-dd")
.toFormatter(Locale.US);
В теории это может быть быстрее, но я не уверен, что это.
PS: Если вы укажете parseLenient()
до части года, он также будет правильно разбирать 4-значные годы (т.е. "2015-JAN-12"
).