嗨我在模式E dd / MM中有一个短日期格式,有什么方法可以将它转换为LocalDate。
String date = "Thu 07/05";
String formatter = "E dd/MM";
final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
final LocalDate localDate = LocalDate.parse(date, formatter);`
但它抛出异常java.time.format.DateTimeParseException: Text 'Thu 07/05' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=5, DayOfMonth=7, DayOfWeek=4},ISO of type java.time.format.Parsed
我们有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
您所拥有的只是一个月和一天 - 因此您可以创建一个月日(创建一个LocalDate,您还需要一年):
MonthDay md = MonthDay.parse(date, formatter);
如果您想要LocalDate,可以使用MonthDay作为起点:
int year = Year.now().getValue();
LocalDate localDate = md.atYear(year);
或者您可以在格式化程序中使用默认年份:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern(pattern)
.parseDefaulting(ChronoField.YEAR, year)
.toFormatter(Locale.US);
LocalDate localDate = LocalDate.parse(date, formatter);
这种方法的好处是它还会检查星期几(星期四)是否正确。