首页 > 解决方案 > JSR310 Year.parse() 抛出 DateTimeParseException 值 < 1000

问题描述

我正在尝试使用 解析 0 到 1000 范围内的年份字符串值java.time.Year.parse(),但是解析失败并使用java.time.format.DateTimeParseException: Text '999' could not be parsed at index 0.

状态的javadoc Year.parse

Obtains an instance of Year from a text string such as 2007. 
The string must represent a valid year. Years outside the range 0000 to 9999 
must be prefixed by the plus or minus symbol.

重现此问题的示例测试:

@Test
public void parse_year() {
   for (int i = 2000; i >= 0; i--) {
      System.out.println("Parsing year: " + i);
      Year.parse(String.valueOf(i));
   }
}

达到年份时,测试会引发异常999

Parsing year: 1003
Parsing year: 1002
Parsing year: 1001
Parsing year: 1000
Parsing year: 999
java.time.format.DateTimeParseException: Text '999' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.Year.parse(Year.java:292)
    at java.time.Year.parse(Year.java:277)
[...]

我究竟做错了什么?

标签: javajsr310

解决方案


需要补到4位

Year.parse(String.format("%04d", i));

Parsing year: 2000
Parsing year: ....
Parsing year: 4
Parsing year: 3
Parsing year: 2
Parsing year: 1
Parsing year: 0

如果你想在第 0 年之前解析,你可以使用

Year.parse("-0001");

推荐阅读