off*_*zaz 0 java timezone-offset java-8 java-time java-17
下面的代码片段
Instant.parse("2023-08-08T00:00:00+02:00")
Run Code Online (Sandbox Code Playgroud)
按照 java-17 中的预期进行编译和执行。但是用java-8执行时,抛出以下异常
java.time.format.DateTimeParseException: Text '2023-08-01T00:00:00+02:00' could not be parsed at index 19
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.Instant.parse(Instant.java:395)
...
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么?java.time api 有什么变化吗?
请注意,我确实知道解决此问题的方法,以下代码适用于 java-8
OffsetDateTime.parse("2023-08-01T00:00:00+02:00", DateTimeFormatter.ISO_OFFSET_DATE_TIME).toInstant()
Run Code Online (Sandbox Code Playgroud)
它产生了期望的结果。我有兴趣知道在 java-time api 实现中,行为是否已经改变?
这是 Java 12 中修复的一个错误:
JDK-8166138:DateTimeFormatter.ISO_INSTANT 应该处理偏移量
版本 8 到 11 将抛出此异常,而从 12 开始的版本将接受时区偏移。
正如文档所述,该Instant.parse方法使用DateTimeFormatter.ISO_INSTANT解析器。后者在版本11和12之间进行了更改(请参阅链接)。在版本12中,在ISO_INSTANT解析器的描述中添加了以下句子:
解析时,DateTimeFormatterBuilder.appendOffsetId() 的行为将用于解析偏移量,根据需要将即时转换为 UTC。
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |