java - 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)
[...]
我究竟做错了什么?
解决方案
需要补到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");
推荐阅读
- pandas - python脚本以交互方式工作,但由于pandas将权限问题作为cron作业而失败
- python - 使用 BeautifulSoup + Python 从列表中获取所有 href 标签和链接
- android - Kotlin Android 11 - getMaxAmplitude()
- android - 在android中使用material.io列表
- flutter - 无法从服务器获取数据
- node.js - 运行 npm start 时出现“index.js not found”,错误!代码 ELIFECYCLE 和 ENOENT
- python - python3.8:无法打开文件'setup.py':[Errno 2]没有这样的文件或目录
- python - 如何使用 txdbus 等待 dbus 信号触发?
- xml - XSLT - 在用于重新组织数据的分组时计算第一个和最后一个位置
- jgrasp - 在 Jgrasp 中丢失了我的工具栏如何找回它?