解析偏移量为 Instant Java 11 的字符串
Parse string with offset to Instant Java 11
我正在尝试将以下字符串 2021-10-15T08:39:05+02:00
解析为 Instant
这可以使用 Java 15 无缝地工作,但会为 Java 11 抛出错误。
java.time.format.DateTimeParseException: Text '2021-10-19T11:06:35+02:00' could not be parsed at index 19
为什么会这样?
Instant.parse("2021-10-15T08:39:05+02:00");
编辑:Java 15
The string ... is parsed using DateTimeFormatter.ISO_INSTANT
.
因此,请阅读 DateTimeFormatter.ISO_INSTANT
的文档:
-
When parsing, the behaviour of DateTimeFormatterBuilder.appendOffsetId()
will be used to parse the offset, converting the instant to UTC as necessary
-
When parsing ... (nothing about how the offset is parsed)
两者之间的行为发生了变化,使 DateTimeFormatter.ISO_INSTANT
(以及使用它的代码)接受更广泛的输入。
要从 Java 11 的字符串中获取 Instant
,您可以先解析为 OffsetDateTime
,然后使用 toInstant()
获取相应的 Instant
.
这是因为 java.time.format.DateTimeFormatter.html#ISO_INSTANT
,由 java.time.Instant#parse
内部使用,行为已更改以支持解析瞬间时的时区偏移。
您可以使用 Java 从 1.8 开始的不同 Java 版本实现相同的行为 java.time.OffsetDateTime#parse
chained with java.time.OffsetDateTime#toInstant
:
Instant i = OffsetDateTime.parse("2021-10-15T08:39:05+02:00").toInstant();
我正在尝试将以下字符串 2021-10-15T08:39:05+02:00
解析为 Instant
这可以使用 Java 15 无缝地工作,但会为 Java 11 抛出错误。
java.time.format.DateTimeParseException: Text '2021-10-19T11:06:35+02:00' could not be parsed at index 19
为什么会这样?
Instant.parse("2021-10-15T08:39:05+02:00");
编辑:Java 15
The string ... is parsed using
DateTimeFormatter.ISO_INSTANT
.
因此,请阅读 DateTimeFormatter.ISO_INSTANT
的文档:
-
When parsing, the behaviour of
DateTimeFormatterBuilder.appendOffsetId()
will be used to parse the offset, converting the instant to UTC as necessary -
When parsing ... (nothing about how the offset is parsed)
两者之间的行为发生了变化,使 DateTimeFormatter.ISO_INSTANT
(以及使用它的代码)接受更广泛的输入。
要从 Java 11 的字符串中获取 Instant
,您可以先解析为 OffsetDateTime
,然后使用 toInstant()
获取相应的 Instant
.
这是因为 java.time.format.DateTimeFormatter.html#ISO_INSTANT
,由 java.time.Instant#parse
内部使用,行为已更改以支持解析瞬间时的时区偏移。
您可以使用 Java 从 1.8 开始的不同 Java 版本实现相同的行为 java.time.OffsetDateTime#parse
chained with java.time.OffsetDateTime#toInstant
:
Instant i = OffsetDateTime.parse("2021-10-15T08:39:05+02:00").toInstant();