Can't parse String to LocalDate (Java 8)

mthmulders picture mthmulders · Jul 24, 2015 · Viewed 22.5k times · Source

My input is a String representation of a date in the format "01-07-2015" for July 1, 2015. I'm trying to parse this into a java.time.LocalDate variable:

final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-YYYY");
final String input = "01-07-2015";
final LocalDate localDate = LocalDate.parse(input, DATE_FORMAT);

Based on the DateTimeFormatter JavaDoc, I would expect this to work. However, I'm greeted with a very friendly and helpful message:

Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=1, MonthOfYear=7, WeekBasedYear[WeekFields[MONDAY,4]]=2015},ISO of type java.time.format.Parsed

I don't really understand what this exception is telling me. Can anyone explain me what's going wrong?

Answer

Jens picture Jens · Jul 24, 2015

For year you have to use the lowercase y:

final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy");

Uppercase Y is used for weekyear. See the javadoc of DateTimeFormatter for more details.