Java 8 DateTimeFormatter 解析在未来很远的 ISO 日期失败

标签 java java-time

我遇到了一个问题,其中 DateTimeFormatter.ISO_DATE_TIME 如果年份大于 9999,则无法解析日期。 我正在寻找错误报告或了解我做错了什么。 此外 - JodaTime 解析适用于相同的字符串。 Java 版本 - 8。 此测试失败:

    public void testParseFarInTheFuture()
    {
        String str = "10000-04-11T01:24:55.887-03:56";

        DateTimeFormatter.ISO_DATE_TIME.parse(str);
    }

与 9999 年相同的测试有效。

是我做错了什么还是有错误?

最佳答案

前置 +

  • 四位数以上的年份应有一个前导加号字符 (+) 表示正年份 (AD)。
  • 任何整数计数的负年份 (BC) 始终以减号 (-) 开头。

java.time 类通常遵循 ISO 8601 标准中规定的规则。参见 handling years in ISO 8601 上的维基百科页面.

代码:

OffsetDateTime ldt = OffsetDateTime.parse( "+10000-04-11T01:24:55.887-03:56" ) ;

查看 code run live at IdeOne.com .

关于Java 8 DateTimeFormatter 解析在未来很远的 ISO 日期失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71958727/

相关文章:

java - 为什么并行流更慢?

java - 为 J2ME 应用程序设计 GUI

java - 如何使用 java.time 从带有年和周的字符串中解析日期

java - 在Android中获取准确的UTC时间

java - 如何将特定日志写入txt文件

java - WriteUTF 每 2 次才有效

java - 将一天中的秒数解析为日期字符串的一部分

java - Java中OffsetDateTime字符串与OffsetDateTime.now()的比较

java - 多约束 Spring 验证

java - Duration#toDays 和 Duration#toDaysPart 是多余的吗?