我正在尝试解析格式为2021-01-15T19:00:00+0000
的日期。我不确定它是哪种格式,但根据我的研究,我尝试了以下方法
1. val odt = OffsetDateTime.parse("2021-01-15T19:00:00+0000")
2. val zdt = ZonedDateTime.parse("2021-01-15T19:00:00+0000")
记录异常:
java.time.format.DateTimeParseException: Text '2021-01-15T19:00:00+0000' could not be parsed at index 19
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:591)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:576)
br
OffsetDateTime
.parse(
"2021-01-15T19:00:00+0000" ,
DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ssxxxx" )
)
.toString()
2021 - 01 - 15 t19:00z
OffsetDateTime
您的输入与UTC (+0000
部分)有0小时-分钟-秒的偏移。
所以你应该用OffsetDateTime
而不是ZonedDateTime
来解析。
ZonedDateTime
ZonedDateTime
类用于时区而不是偏移量。时区是特定地区的人们使用的偏移量的过去、现在和未来变化的命名历史,由他们的政治家决定。时区名称格式为Continent/Region
,如Europe/Paris
或America/Edmonton
。
offset
中的可选冒号不幸的是,您的输入忽略了偏移量的小时和分钟之间的冒号字符。虽然在ISO 8601标准中是可选的,但parse
方法期望找到该字符。
如果你知道所有的输入都有相同的+0000
,我将简单地执行一个字符串操作。
OffsetDateTime odt = OffsetDateTime.parse( "2021-01-15T19:00:00+0000".replace( "+0000" , "+00:00" ) ) ;
如果可能出现其他偏移量,则必须指定格式化模式。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ssxxxx" ) ;
OffsetDateTime odt = OffsetDateTime.parse( input , f ) ;
查看此代码运行在Ideone.com。
2021 - 01 - 15 t19:00z
我建议使用带有正确偏移量的OffsetDateTime -这应该可以做到!