问题
With Joda library, you can do
DateTimeFormat.forPattern("yyyy").parseLocalDate("2008")
that creates a LocalDate at Jan 1st, 2008
With Java8, you can try to do
LocalDate.parse("2008",DateTimeFormatter.ofPattern("yyyy"))
but that fails to parse:
Text '2008' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2008},ISO of type java.time.format.Parsed
Is there any alternative, instead of specifically writing sth like
LocalDate.ofYearDay(Integer.valueOf("2008"), 1)
?
回答1:
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);
回答2:
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.
回答3:
I didn't get you but from the title I think you want to parse a String to a localdate so this is how you do it
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy");
String date = "16/08/2016";
//convert String to LocalDate
LocalDate localDate = LocalDate.parse(date, formatter);
来源:https://stackoverflow.com/questions/41358069/parsing-a-year-string-to-a-localdate-with-java8