DateTimeFormatter支持单个数字日和月份的日期

Mar*_*xey 42 java date java-8 java-time

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)));
Run Code Online (Sandbox Code Playgroud)

在此示例中,SimpleDateFormat正确解析日期,但DateTimeFormatter会引发异常.如果我使用零填充日期,例如"05/03/1969",两者都有效.但是,如果月中的某一天或一年中的DateTimeFormatter某个月是单个数字,则抛出异常.

DateTimeFormatter解析每月和每月的一位和两位数的正确格式是什么?

Hol*_*ger 67

文档:

Number:如果字母数为1,则使用最小位数输出该值,不进行填充.

所以你想要的格式说明符是M/d/yyyy,使用单个字母形式.当然,它仍然会解析日期String就像"12/30/1969"正确为这些日/月数值,两个数字是"的最小位数".

重要的区别是,MM并且dd需要零填充,而不是那个,M并且d不能处理大于9的值(这有点......不寻常).


Jog*_*lik 12

在 Java 8 Date Time API 中,我最近使用了

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .appendOptional(DateTimeFormatter.ofPattern("M/dd/yyyy"))
            .toFormatter();

System.out.println(LocalDate.parse("10/22/2020", formatter));
System.out.println(LocalDate.parse("2/21/2020", formatter));
Run Code Online (Sandbox Code Playgroud)