Как вы анализируете базовую (короткую / компактную) строку ISO:8601 с Joda?

У меня есть строка времени, которая выглядит так: 20170822T194135+00, Это называется основной формат ISO:8601, если я правильно понял.

Когда я пытаюсь разобрать его с помощью ZonedDateTimeВыдает исключение, жалуясь, что не может его проанализировать.

Итак, как мне преобразовать эту строку в допустимый объект datetime Joda?

Нужно ли мне создавать ручной "формат" для его анализа (это было бы глупо, учитывая, что это стандартный формат)?


Я отчаянно пытался реализовать собственный формат:

const time = ZonedDateTime.parse(timeString, DateTimeFormatter.ofPattern(`yyyyMMdd'T'HHmmssZ`));

Но это выдает ошибку на столбце 15, Похоже, что не удается разобрать часовой пояс. Правильна ли моя реализация? Как мне заставить это работать?

1 ответ

Решение

Я мог бы сделать это, используя шаблон x как описано в документации (этот шаблон принимает смещения как +00).

Затем я разобрался прямо к ZonedDateTime:

const formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmssx");

const time = ZonedDateTime.parse("20170822T194135+00", formatter);

Результирующий time переменная имеет значение, эквивалентное 2017-08-22T19:41:35Z,

Встроенные форматеры (такие как ISO_LOCAL_DATE_TIME) не может разобрать этот формат, поэтому кажется, что единственным способом является создание форматера.

Другие вопросы по тегам