将shortdate转换为LocalDate

时间:2015-12-24 11:06:39

标签: java date java-8 locale java-time

嗨我在模式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

我们有什么方法可以解决这个问题吗?

1 个答案:

答案 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);

这种方法的好处是它还会检查星期几(星期四)是否正确。