【发布时间】:2018-11-16 02:39:50
【问题描述】:
我希望从我的项目中删除 Joda-Time 库。
我正在尝试将两位数的年份转换为全年。 Joda-Time 的以下代码可以实现该目的。下面是joda-time的如下代码
DateTimeFormatter TWO_YEAR_FORMATTER = DateTimeFormat.forPattern("yy");
int year = LocalDate.parse("99"", TWO_YEAR_FORMATTER).getYear();
System.out.println(year);
输出:1999
这是我期望的输出,这在我的情况下是有意义的。但是,当我使用 java.time API 尝试相同的过程时,它会产生 DatetimeParseException。下面是java.time API的如下代码:
DateTimeFormatter TWO_YEAR_FORMATTER = DateTimeFormatter.ofPattern("yy");
int year = LocalDate.parse("99", TWO_YEAR_FORMATTER).getYear();
System.out.println(year);
堆栈跟踪:
Exception in thread "main" java.time.format.DateTimeParseException: Text '99' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2099},ISO of type java.time.format.Parsed
at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2017)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952)
at java.base/java.time.LocalDate.parse(LocalDate.java:428)
at scratch.main(scratch.java:10)
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {Year=2099},ISO of type java.time.format.Parsed
at java.base/java.time.LocalDate.from(LocalDate.java:396)
at java.base/java.time.format.Parsed.query(Parsed.java:235)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
... 2 more
我没有看到堆栈跟踪的原因。如果有人能帮助我理解以下场景并解释如何使用 Java 8 时间 API 将两位数年份转换为全年,那就太好了。
【问题讨论】:
-
只是出于兴趣,使用API基本上做
2000 + year有什么好处? -
@DodgyCodeException 好吧,我只想从项目中删除 joda-time 库
标签: java jodatime java-time 2-digit-year