Подтвердить что ты не робот

Поддержка DateTimeFormatter для одного знака День месяца и месяца года

DateTimeFormmater, похоже, не обрабатывает однозначный день месяца:

String format = "MM/dd/yyyy";
String date   = "5/3/1969";
System.out.println(new SimpleDateFormat(format).parse(date));
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));

В этом примере SimpleDateFormat корректно анализирует дату, но DateTimeFormatter выдает исключение. Если бы я использовал нулевые заполненные даты, например, "05/03/1969", оба работают. Однако, если либо день месяца, либо месяц года являются одиночной цифрой, то DateTimeFormatter выдает исключение.

Каков правильный формат DateTimeFormatter для анализа как одного, так и двухзначного числа месяца и месяца года?

4b9b3361

Ответ 1

Из документации:

Номер. Если количество букв равно единице, то значение выводится с использованием минимального количества цифр и без заполнения.

Таким образом, спецификатор формата - M/d/yyyy, используя однобуквенные формы. Конечно, он все равно будет синтаксически проверять дату String как "12/30/1969", так как для этих значений день/месяц две цифры являются "минимальным количеством цифр".

Важное отличие состоит в том, что MM и dd требуют нулевого заполнения, а не M и d не могут обрабатывать значения больше 9 (это было бы немного... необычно).