你如何用 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
)无法解析这种格式,所以唯一的办法似乎是创建一个格式化程序。
我有一个时间字符串,它看起来像这样: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
)无法解析这种格式,所以唯一的办法似乎是创建一个格式化程序。