我有一个时间字符串,如下所示:20170822T194135+00
。如果我理解正确,这称为基本ISO:8601格式。
当我尝试使用ZonedDateTime
解析它时,它会抛出异常,抱怨它无法解析它。
那么,如何将此字符串转换为有效的Joda datetime对象?
我是否需要构建手动“格式”来解析它(考虑到它是一种标准格式,这会很愚蠢)?
绝望地,我实际上试图实现自定义格式:
const time = ZonedDateTime.parse(timeString, DateTimeFormatter.ofPattern(`yyyyMMdd'T'HHmmssZ`));
但是,它会在列15
上引发错误。看起来它无法解析时区。我的实施是否正确?我如何使它工作?
答案 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
)无法解析此格式,因此唯一的方法似乎是创建格式化程序。