Can't parse String to LocalDate (Java 8)

后端 未结 2 483
半阙折子戏
半阙折子戏 2020-11-30 06:20

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:

相关标签:
2条回答
  • 2020-11-30 07:03

    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.

    0 讨论(0)
  • 2020-11-30 07:13

    The answer to the question is to use 'y' not 'Y'.

    To explain the error message, lets decompose it:

    Unable to obtain LocalDate from TemporalAccessor

    This is saying that it cannot create a LocalDate (what was requested) from a TemporalAccessor (the low-level interface that provides hashmap-like access to the fields of date/time).

    of type java.time.format.Parsed

    This is saying that the object passed into the method was of type java.time.format.Parsed. This is the standard output type of parsing, and contains all the information that was parsed.

    {DayOfMonth=1, MonthOfYear=7, WeekBasedYear[WeekFields[MONDAY,4]]=2015},ISO

    This is the toString() form of the java.time.format.Parsed object that resulted from parsing. It is saying that four things were parsed:

    • DayOfMonth=1, the day-of-month parsed with value of 1
    • MonthOfYear=7, the month-of-year parsed with value of 7
    • WeekBasedYear[WeekFields[MONDAY,4]]=2015, the week-based-year parsed with value of 2015
    • ISO, which is the ISO calendar system (a default value)

    Since it is not possible to produce a LocalDate from the combination DayOfMonth + MonthOfYear + WeekBasedYear, an exception is thrown.

    Note that the [WeekFields[MONDAY,4]] part refers to the fact that there are many different ways to define a week, in the US weeks start on Sunday, but in the ISO standard and the EU they start on Monday.

    0 讨论(0)
提交回复
热议问题