如何设置该日期的格式?



我正在尝试解析格式为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/ParisAmerica/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 -这应该可以做到!

相关内容

  • 没有找到相关文章

最新更新