fac*_*ndu 7 jodatime java-8 localdate
有了Joda图书馆,你可以做到
DateTimeFormat.forPattern("yyyy").parseLocalDate("2008")
Run Code Online (Sandbox Code Playgroud)
这将在2008年1月1日创建一个LocalDate
使用Java8,您可以尝试
LocalDate.parse("2008",DateTimeFormatter.ofPattern("yyyy"))
Run Code Online (Sandbox Code Playgroud)
但是无法解析:
Text '2008' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2008},ISO of type java.time.format.Parsed
Run Code Online (Sandbox Code Playgroud)
有没有其他选择,而不是特别写...
LocalDate.ofYearDay(Integer.valueOf("2008"), 1)
Run Code Online (Sandbox Code Playgroud)
?
gre*_*449 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);
Run Code Online (Sandbox Code Playgroud)
String yearStr = "2008";
Year year = Year.parse(yearStr);
System.out.println(year);
Run Code Online (Sandbox Code Playgroud)
输出:
2008年
如果您需要的是一种表示年份的方法,那么LocalDate这不是适合您的目的的类。java.time包括一个Year完全适合您的课程。请注意,我们甚至不需要显式格式化程序,因为显然您的年份字符串是年份的默认格式。如果以后您想转换,那也很容易。转换为一年的第一天,就像 Joda-Time 会给你的:
LocalDate date = year.atDay(1);
System.out.println(date);
Run Code Online (Sandbox Code Playgroud)
2008-01-01
如果您发现以下内容更具可读性,请改用它:
LocalDate date = year.atMonth(Month.JANUARY).atDay(1);
Run Code Online (Sandbox Code Playgroud)
结果是一样的。
如果您LocalDate从一开始就需要一个,greg449 的答案是正确的,您应该使用它。
| 归档时间: |
|
| 查看次数: |
3222 次 |
| 最近记录: |