Java 8日期和时间:解析没有冒号的ISO 8601字符串中的偏移量

12 浏览
0 Comments

Java 8日期和时间:解析没有冒号的ISO 8601字符串中的偏移量

我们尝试解析带有时区偏移的以下ISO 8601日期时间字符串:

final String input = "2022-03-17T23:00:00.000+0000";
OffsetDateTime.parse(input);
LocalDateTime.parse(input, DateTimeFormatter.ISO_OFFSET_DATE_TIME);

这两种方法都失败了(这是有道理的,因为OffsetDateTime也使用DateTimeFormatter.ISO_OFFSET_DATE_TIME),因为时区偏移中有一个冒号。

java.time.format.DateTimeParseException: Text '2022-03-17T23:00:00.000+0000' could not be parsed at index 23

但根据维基百科,有4种有效的时区偏移格式:

其他框架/语言可以无问题地解析此字符串,例如Javascript的Date()或Jackson的ISO8601Utils(他们在这里讨论了此问题)

现在我们可以编写自己的带有复杂正则表达式的DateTimeFormatter,但在我看来,java.time库应该能够默认解析此有效的ISO 8601字符串,因为它是有效的。

目前我们使用Jackson的ISO8601DateFormat,但我们更希望使用官方的java.time库来处理。你对解决这个问题有什么建议?

0