使用Joda库,您可以
DateTimeFormat.forPattern("yyyy").parseLocalDate("2008")
在2008年1月1日创建LocalDate
使用Java8,您可以尝试
LocalDate.parse("2008",DateTimeFormatter.ofPattern("yyyy"))
但无法解析:
Text '2008' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2008},ISO of type java.time.format.Parsed
有没有其他选择,而不是像
那样具体写作LocalDate.ofYearDay(Integer.valueOf("2008"), 1)
答案 0 :(得分:11)
LocalDate
解析要求指定所有年,月和日。
您可以使用DateTimeFormatterBuilder
并使用parseDefaulting
方法指定月和日的默认值:
DateTimeFormatter format = new DateTimeFormatterBuilder()
.appendPattern("yyyy")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter();
LocalDate.parse("2008", format);
答案 1 :(得分:2)
String yearStr = "2008";
Year year = Year.parse(yearStr);
System.out.println(year);
输出:
2008
如果您需要的是表示一年的方式,那么LocalDate
不适合您的目的。 java.time
完全包含Year
课程。请注意,我们甚至不需要显式格式化器,因为显然您的年份字符串是一年的默认格式。如果以后你想转换,那也很容易。要转换成一年的第一天,就像Joda-Time会给你的那样:
LocalDate date = year.atDay(1);
System.out.println(date);
2008-01-01
如果您发现以下内容更具可读性,请改用:
LocalDate date = year.atMonth(Month.JANUARY).atDay(1);
结果是一样的。
如果您从一开始就需要LocalDate
,greg449’s answer是正确的,您应该使用的那个。
答案 2 :(得分:0)
我没有找到你 但是从标题我认为你想要将一个字符串解析为本地日期,这就是你如何做到这一点
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy");
String date = "16/08/2016";
//convert String to LocalDate
LocalDate localDate = LocalDate.parse(date, formatter);