当我使用时SimpleDateFormat
,它可以解析.
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:{年份= 2015,MonthOfYear = 10},类型的Java的ISO .time.format.Parsed
日期的字符串值是"201510"
.
问自己一个问题:哪一天应该用String解析"201510"
?A LocalDate
需要一天,但由于日期中没有解析的日期,LocalDate
因此无法构造实例.
如果您只想解析一年和一个月,则可以使用该YearMonth
对象:
YearMonth localDate = YearMonth.parse(date, formatter);
但是,如果您真的想要LocalDate
从此String中解析,则可以构建自己的String,DateTimeFormatter
以便它将该月的第一天用作默认值:
DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("yyyyMM") .parseDefaulting(ChronoField.DAY_OF_MONTH, 1) .toFormatter(); LocalDate localDate = LocalDate.parse(date, formatter);