java.time.Instant - 解析大日期时出错

问题描述 投票:0回答:1

我正在尝试使用 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 中发现了错误吗:)?

java java-time java.time.instant
1个回答
2
投票

不,这不是错误 - 正在按规定工作!

来自parse()

文档

使用 DateTimeFormatter.ISO_INSTANT

解析

ISO_INSTANT

返回一个不可变的格式化程序,能够格式化和解析 ISO-8601 即时格式

最后,来自 Wikipedia 的 ISO-8601():

为了表示 0000 之前或 9999 之后的年份,该标准还允许扩展年份表示形式......扩展的年份表示形式 [±YYYYY] 必须具有商定的超出四位数最小值的额外年份数字,和它必须以+或-符号为前缀


输入字符串

"78000000-01-01T00:00:00Z"
缺少
+
符号,而
"-78000000-01-01T00:00:00Z"
正确地以
-
符号开头。

输入

"+78000000-01-01T00:00:00Z"
解析无误

© www.soinside.com 2019 - 2024. All rights reserved.