你如何用 Joda 解析基本的 (short/compact) ISO:8601 字符串?

How do you parse basic (short/compact) ISO:8601 string with Joda?

我有一个时间字符串,它看起来像这样:20170822T194135+00。如果我理解正确的话,这被称为基本 ISO:8601 格式。

当我尝试使用 ZonedDateTime 解析它时,它抛出异常,抱怨它无法解析它。

那么,如何将此字符串转换为有效的 Joda 日期时间对象?

我是否需要构建手册 "format" 来解析它(考虑到它是标准格式,这很愚蠢)?


绝望的是,我实际上已经尝试实现自定义格式:

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

但是,它在列 15 上抛出错误。看起来它无法解析时区。我的实施是否正确?我如何让它发挥作用?

我可以使用 docs 中描述的模式 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)无法解析这种格式,所以唯一的办法似乎是创建一个格式化程序。