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:无法在索引 23 处解析文本 '2022-03-17T23:00:00.000+0000'
但根据维基百科,时区偏移量有4种有效格式:
<time>Z
<time>±hh:mm
<time>±hhmm
<time>±hh
其他框架/语言可以毫无问题地解析此字符串,例如Javascript或Jacksons(他们在这里讨论这个问题)Date()
ISO8601Utils
)
现在我们可以用一个复杂的正则表达式编写自己的正则表达式,但在我看来,默认情况下,库应该能够解析这个有效的ISO 8601字符串,因为它是一个有效的字符串。DateTimeFormatter
java.time
现在我们使用 Jacksons ,但我们更愿意使用官方库来使用。您如何解决这个问题?ISO8601DateFormat
date.time