将具有偏移量的时间转换为UTC并返回localdatetime

时间:2020-01-14 10:29:43

标签: java date parsing time utc

我有一个方法,该方法根据Iso8601解析字符串并返回LocalDateTime。 现在,我接受可能的偏移量。 现在的问题是我必须将偏移量转换为UTC并将其返回为LocalDateTime。

到目前为止,我已经尝试过使用Instant,OffsetDateTime,ZonedDateTime。 我总是相反。而不是+06:00,我的结果将显示为-06:00。

return LocalDateTime.ofInstant(Instant.from(OffsetDateTime.parse(date, buildIso8601Formatter())), ZoneOffset.UTC);

这是与上面提到的其他尝试过的解决方案相同的解决方案。

我知道这不是常用的方法,因此我做了很多研究,但是当前的架构仅允许我这样做。

编辑示例: 使用这样的实现:

OffsetDateTime offsetDateTime = OffsetDateTime.parse(date, buildIso8601Formatter()); 
Instant instant = offsetDateTime.toInstant();


return LocalDateTime.ofInstant(instant, ZoneOffset.UTC);

假设我得到"2020-01-12T08:30+06:00"作为方法输入。我必须返回LocalDateTime。

因此,我想拥有"2020-01-12T14:30",而我最好的解决方案是采用相反的方式:"2020-01-12T02:30"

1 个答案:

答案 0 :(得分:4)

java.time的行为是正确的。字符串2020-01-12T08:30+06:00表示此字符串的datetime部分是某个区域的日期时间 local ,该区域存在于与UTC偏移+06:00的区域中。

您的解释与上述情况不同。在您的情况下,您将08:30解释为与UTC同步的时间,然后将所需区域的时区偏移字符串连接起来。

因此,如果您真的要执行此操作,请三思。


实现此目标的一种方法是,只需将datetime解析为偏移日期时间,然后求反偏移即可。

相关问题