2014-12-19 100 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

編號:如果字母的計數爲1,則該值是使用數字和無填充的最小數量的輸出。

所以你想要的格式說明符是M/d/yyyy,使用單個字母的形式。當然,它仍然會正確解析日期String s,如"12/30/1969",因爲這些日/月值,兩位數字是「最小位數」。

最重要的區別是,MMdd需要補零,而不是Md不能處理的值大於9(這將是一個有點...不尋常的)。