解析具有时区偏移值的 ZonedDateTime 字符串
Parsing a ZonedDateTime String with timezone offset value
我正在尝试使用 ZonedDateTime 对象的以下行来解析格式为“yyyy-MM-dd'T'HH:mm:ssZ”的 ISO8601 时间字符串:
ZonedDateTime date = ZonedDateTime.parse("2021-02-19T14:32:12+0000", DateTimeFormatter.ISO_ZONED_DATE_TIME);
但是我在执行此操作时遇到以下错误:
java.time.format.DateTimeParseException: Text '2021-02-19T14:32:12+0000' could not be parsed at index 19
我无法想象这是不允许的,因为 + 符号是解析的有效字符。任何人都可以帮助解决这里的问题吗?
这是因为 ISO_ZONED_DATE_TIME
需要偏移量和区域。 请参阅编辑,并非在所有情况下都需要。这是因为偏移量必须包含冒号。
参见 the docs。
改用DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssxx", Locale.ROOT)
。或者,您可以使用 DateTimeFormatterBuilder
:
new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_DATE_TIME)
.appendPattern("xx")
.toFormatter(Locale.ROOT);
编辑
仅阅读 Javadoc 的 摘要片段 显然是不够的。 ISO_ZONED_DATE_TIME
并不严格要求区域 ID,如评论中所述。那里的第二个要点提到了它:“如果区域 ID 不可用或者是 ZoneOffset,则格式完成”.
我正在尝试使用 ZonedDateTime 对象的以下行来解析格式为“yyyy-MM-dd'T'HH:mm:ssZ”的 ISO8601 时间字符串:
ZonedDateTime date = ZonedDateTime.parse("2021-02-19T14:32:12+0000", DateTimeFormatter.ISO_ZONED_DATE_TIME);
但是我在执行此操作时遇到以下错误:
java.time.format.DateTimeParseException: Text '2021-02-19T14:32:12+0000' could not be parsed at index 19
我无法想象这是不允许的,因为 + 符号是解析的有效字符。任何人都可以帮助解决这里的问题吗?
这是因为 请参阅编辑,并非在所有情况下都需要。这是因为偏移量必须包含冒号。ISO_ZONED_DATE_TIME
需要偏移量和区域。
参见 the docs。
改用DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssxx", Locale.ROOT)
。或者,您可以使用 DateTimeFormatterBuilder
:
new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_DATE_TIME)
.appendPattern("xx")
.toFormatter(Locale.ROOT);
编辑
仅阅读 Javadoc 的 摘要片段 显然是不够的。 ISO_ZONED_DATE_TIME
并不严格要求区域 ID,如评论中所述。那里的第二个要点提到了它:“如果区域 ID 不可用或者是 ZoneOffset,则格式完成”.