Parsing a year String to a LocalDate with Java8
String yearStr = "2008";
Year year = Year.parse(yearStr);
System.out.println(year);
Output:
2008
If what you need is a way to represent a year, then LocalDate
is not the correct class for your purpose. java.time
includes a Year
class exactly for you. Note that we don’t even need an explicit formatter since obviously your year string is in the default format for a year. And if at a later point you want to convert, that’s easy too. To convert into the first day of the year, like Joda-Time would have given you:
LocalDate date = year.atDay(1);
System.out.println(date);
2008-01-01
In case you find the following more readable, use that instead:
LocalDate date = year.atMonth(Month.JANUARY).atDay(1);
The result is the same.
If you do need a LocalDate
from the outset, greg449’s answer is correct and the one that you should use.
LocalDate
parsing requires that all of the year, month and day are specfied.
You can specify default values for the month and day by using a DateTimeFormatterBuilder
and using the parseDefaulting
methods:
DateTimeFormatter format = new DateTimeFormatterBuilder()
.appendPattern("yyyy")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter();
LocalDate.parse("2008", format);