2015-12-03 43 views
2

當我使用SimpleDateFormat時,它可以解析。爲什麼我的模式(「yyyyMM」)無法用DateTimeFormatter解析(java 8)

SimpleDateFormat format = new SimpleDateFormat("yyyyMM"); 
format.setLenient(false); 
Date d = format.parse(date); 

但是當我使用Java 8 DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM"); 
LocalDate localDate = LocalDate.parse(date, formatter); 

它拋出

java.time.format.DateTimeParseException:文本 '201510' 無法解析:無法獲取來自TemporalAccessor的LocalDate:{Year = 2015,MonthOfYear = 10},類型爲java的ISO .time.format.Parsed

日期的字符串值爲"201510"

+1

它不是'LocalDate'因爲你需要指定一天。 201510應該代表哪個日期?那個月的第一個? – zapl

+0

它適用於我,編譯並運行jdk1.8.0_25 –

回答

6

問自己問題:應該用字符串"201510"解析哪一天? A LocalDate需要一天,但由於解析日期沒有日期,因此無法構建LocalDate的實例。

如果你只是想分析了一年一個月,你可以使用YearMonth對象,而不是:

YearMonth localDate = YearMonth.parse(date, formatter); 

但是,如果你真的想有一個LocalDate從這個字符串解析,您可以建立你自己的DateTimeFormatter,以便它使用該月的第一天爲默認值:

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
           .appendPattern("yyyyMM") 
           .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) 
           .toFormatter(); 
LocalDate localDate = LocalDate.parse(date, formatter); 
1

您可以使用YearMonth並指定要在一天(說的第爲例):

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM"); 
LocalDate localDate = YearMonth.parse(date, formatter).atDay(1); 

或者如果一天不相干,只需使用YearMonth

相關問題