我正在尝试使用 Instant.parse 方法解析一个非常大的日期(但仍然比 Instant.MAX 小)但出现错误。
String input = "78000000-01-01T00:00:00Z";
Instant instant = Instant.parse(input);
例外:
Exception in thread "main" java.time.format.DateTimeParseException: Text '78000000-01-01T00:00:00Z' could not be parsed at index 0
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2106)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:2008)
at java.base/java.time.Instant.parse(Instant.java:399)
BC日期“-78000000-01-01T00:00:00Z”解析成功。
我在 Java 中发现了错误吗:)?
不,这不是错误 - 正在按规定工作!
来自parse()
的
文档:
解析
返回一个不可变的格式化程序,能够格式化和解析 ISO-8601 即时格式
最后,来自 Wikipedia 的 ISO-8601(年):
为了表示 0000 之前或 9999 之后的年份,该标准还允许扩展年份表示形式......扩展的年份表示形式 [±YYYYY] 必须具有商定的超出四位数最小值的额外年份数字,和它必须以+或-符号为前缀。
输入字符串
"78000000-01-01T00:00:00Z"
缺少 +
符号,而 "-78000000-01-01T00:00:00Z"
正确地以 -
符号开头。
输入
"+78000000-01-01T00:00:00Z"
解析无误