将带偏移量的时间转换为 UTC 和 return localdatetime
Convert Time with offset to UTC and return localdatetime
我有一个根据 Iso8601 和 returns 解析字符串的方法 LocalDateTime。
现在我接受可能的补偿。
现在的问题是我必须将偏移量转换为 UTC 并将其 return 转换为 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"
作为我方法的输入。我必须 return LocalDateTime。
因此我想要 "2020-01-12T14:30"
而不是我最好的解决方案是相反的方式:"2020-01-12T02:30"
.
java.time
的行为是正确的。字符串 2020-01-12T08:30+06:00
表示该字符串的日期时间部分是某个区域的日期时间 local,该区域存在于距 UTC 偏移量为 +06:00
的区域。
您的理解与上述案例不同。在您的情况下,您将 08:30
解释为与 UTC 同步的时间,然后连接所需区域的时区偏移字符串。
因此,如果您真的想这样做,请再考虑一下。
实现此目的的一种方法是将日期时间解析为偏移日期时间并否定偏移量。
我有一个根据 Iso8601 和 returns 解析字符串的方法 LocalDateTime。 现在我接受可能的补偿。 现在的问题是我必须将偏移量转换为 UTC 并将其 return 转换为 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"
作为我方法的输入。我必须 return LocalDateTime。
因此我想要 "2020-01-12T14:30"
而不是我最好的解决方案是相反的方式:"2020-01-12T02:30"
.
java.time
的行为是正确的。字符串 2020-01-12T08:30+06:00
表示该字符串的日期时间部分是某个区域的日期时间 local,该区域存在于距 UTC 偏移量为 +06:00
的区域。
您的理解与上述案例不同。在您的情况下,您将 08:30
解释为与 UTC 同步的时间,然后连接所需区域的时区偏移字符串。
因此,如果您真的想这样做,请再考虑一下。
实现此目的的一种方法是将日期时间解析为偏移日期时间并否定偏移量。