Поддержка 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
для анализа как одного, так и двухзначного числа месяца и месяца года?
Ответы
Ответ 1
Из документации:
Номер. Если количество букв равно единице, то значение выводится с использованием минимального количества цифр и без заполнения.
Таким образом, спецификатор формата - M/d/yyyy
, используя однобуквенные формы. Конечно, он все равно будет синтаксически проверять дату String
как "12/30/1969"
, так как для этих значений день/месяц две цифры являются "минимальным количеством цифр".
Важное отличие состоит в том, что MM
и dd
требуют нулевого заполнения, а не M
и d
не могут обрабатывать значения больше 9 (это было бы немного... необычно).