Java 11解析带偏移量日期字符串为Instant报错Java15正常的原因
版本差异原因说明
该问题是JDK不同版本对Instant.parse()方法的解析规则调整导致的:
- Java 11及更早版本中,
Instant.parse()仅支持严格符合ISO_INSTANT标准的字符串,要求时间偏移量必须使用UTC标识Z表示,仅接受2021-10-15T08:39:05Z这类格式的输入,无法识别+02:00这类带正负号的时区偏移后缀,因此你输入的字符串会在偏移量起始位置(索引19)抛出解析异常。 - Java 12及后续版本(包括你使用的Java 15),官方对
Instant.parse()的解析能力做了扩展,新增了对ISO_OFFSET_DATE_TIME格式的支持,可以直接解析带任意时区偏移的时间字符串,因此你的代码在Java 15中可以正常运行。
如果需要在Java 11环境中兼容该解析需求,可以使用如下方案:
Instant result = OffsetDateTime.parse("2021-10-15T08:39:05+02:00").toInstant();
内容的提问来源于stack exchange,提问作者joachim
相关产品推荐
相关产品推荐

