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
来解析一位数和两位数的日期和月份?
4条答案
按热度按时间wz3gfoph1#
您可以在Utils类中使用这种方法,并且由于DateTimeFormatter是线程安全的,因此可以将其用作Utils类中的字段
vmdwslir2#
从the documentation开始:
所以你需要的格式说明符是
M/d/yyyy
,使用单字母形式。当然,它仍然会像"12/30/1969"
一样正确地解析日期String
,因为对于这些天/月值,两位数是"最小位数"。重要的区别在于
MM
和dd
需要补零,而不是M
和d
不能处理大于9的值(这有点......不寻常)。3gtaxfhh3#
在Java 8日期时间API中,我最近使用了
yacmzcpb4#
处理这类问题的最佳方法,即日期(日,月或年)中不同数字的数量是使用这种模式:* *(月日)**。
示例:
此处uuuu/uu处理四位数和两位数的年份。