2015-12-03 45 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

相关问题