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
格式来解析每月的一位和两位数以及一年中的某个月?
答案 0 :(得分:59)
数字:如果字母数为1,则使用最小位数输出该值,不使用填充。
所以你想要的格式说明符是M/d/yyyy
,使用单个字母表格。当然,对于这些日/月值,它仍会正确解析String
之类的"12/30/1969"
,两位数字是“最小位数”。
重要的区别是MM
和dd
要求零填充,而不是M
和d
无法处理大于9的值(这可能会有点......不寻常)。
答案 1 :(得分:6)
我最近在Java 8 Date Time API中使用
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern("M/dd/yyyy"))
.appendOptional(DateTimeFormatter.ofPattern(("MM/dd/yyyy")))
.toFormatter();
System.out.println(LocalDate.parse("10/22/2020", formatter));
System.out.println(LocalDate.parse("2/21/2020", formatter));