我正在尝试将字符串转换为LocalDate
对象。但我收到以下错误。
private LocalDate getLocalDate(String year) {
String yearFormatted = "2015-01-11";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd");
LocalDate dateTime = LocalDate.parse(yearFormatted, formatter);
return dateTime;
}
这是错误
Caused by: java.time.format.DateTimeParseException: Text '2015-01-11' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=11, WeekBasedYear[WeekFields[SUNDAY,1]]=2015, MonthOfYear=1},ISO of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920) ~[na:1.8.0_102]
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855) ~[na:1.8.0_102]
at java.time.LocalDate.parse(LocalDate.java:400) ~[na:1.8.0_102]
答案 0 :(得分:3)
正如the documentation所述,格式模式中的大写Y
是基于周的年份,也就是周数属于的年份。这并不总是与日历年相同(尽管通常是这样)。 Java很聪明地认识到它无法确保从基于周的年,月和月中得到一个日期,所以它会抛出异常。
由于您的字符串格式与默认的LocalDate
格式(ISO 8601)一致,因此最简单的解决方案是完全删除格式化程序,然后执行以下操作:
LocalDate dateTime = LocalDate.parse(yearFormatted);
通过此更改,您可以按照我的预期返回2015-01-11
的日期。另一个解决方法是将YYYY
替换为年份的小写yyyy
或签名年份的uuuu
(其中0是1 BC,-1是2BC等)。