Мы пытаемся проанализировать следующую строку DateTime 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: текст '2022-03-17T23: 00: 00.000 + 0000' не может быть проанализирован по индексу 23
Но согласно Википедии есть 4 действительных формата для смещения временной зоны:
<time>Z
<time>±hh:mm
<time>±hhmm
<time>±hh
Другие фреймворки/языки могут анализировать эту строку без каких-либо проблем, например Javascript Date()
или Jacksons ISO8601Utils
(здесь они обсуждаются здесь)
Теперь мы можем написать собственный DateTimeFormatter
со сложным RegEx, но, на мой взгляд, библиотека java.time
должна иметь возможность анализировать эту действительную строку ISO 8601 по умолчанию, так как она действительна.
В настоящее время мы используем Jacksons ISO8601DateFormat
, но мы бы предпочли использовать официальную библиотеку date.time
для работы. Каким будет ваш подход к решению этой проблемы?