Как вы анализируете базовую (короткую / компактную) строку 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
) не может разобрать этот формат, поэтому кажется, что единственным способом является создание форматера.