如何使用Joda解析基本(短/紧)ISO:8601字符串?

时间:2017-08-22 21:29:49

标签: timezone-offset datetime-parsing js-joda

我有一个时间字符串,如下所示:20170822T194135+00。如果我理解正确,这称为基本ISO:8601格式。

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

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

我是否需要构建手动“格式”来解析它(考虑到它是一种标准格式,这会很愚蠢)?

绝望地,我实际上试图实现自定义格式:

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

但是,它会在列15上引发错误。看起来它无法解析时区。我的实施是否正确?我如何使它工作?

1 个答案:

答案 0 :(得分:2)

我可以使用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)无法解析此格式,因此唯一的方法似乎是创建格式化程序。