2014-12-19 1 views
21
DateTimeFormmater

года, кажется, не обрабатывать одноразрядный день месяца:DateTimeFormatter Поддержка одного дня значного месяца и месяц

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 для разбора одного и двух цифр дня месяца и месяца года?

+0

Вы разрешили эту проблему? Я также рассматриваю решение java8 для анализа 1 или 2 цифр месяца или 2 или 4 цифры года. – user607455

ответ

35

От the documentation:

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

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

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