我有两个从字符串解析的ZoneOffset对象。我如何总结它们并应用于ZonedDateTime?
例如:
原始 ZonedDateTime 是2017-12-27T18:30:00
,第一个偏移量是+03
,第二个偏移量是+05
如何获得2017-12-28T18:30:00+08:00
or的输出2017-12-28T10:30:00
?
我有两个从字符串解析的ZoneOffset对象。我如何总结它们并应用于ZonedDateTime?
例如:
原始 ZonedDateTime 是2017-12-27T18:30:00
,第一个偏移量是+03
,第二个偏移量是+05
如何获得2017-12-28T18:30:00+08:00
or的输出2017-12-28T10:30:00
?
我这样理解你的问题(请检查是否正确):你有ZonedDateTime
一个通常与 UTC 偏移的问题。我会打电话dateTimeWithBaseOffset
的。你有另一个ZonedDateTime
相对于前者的偏移量的偏移量ZonedDateTime
。这确实是不正确的;该课程的设计者决定偏移量来自 UTC,但有人使用它与预期不同。我会打电话给后者dateTimeWithOffsetFromBase
。
如果您可以修复dateTimeWithOffsetFromBase
使用非正统偏移量生成的代码,那当然是最好的。我假设现在这不是您可以使用的解决方案。因此,您需要将不正确的偏移量更正为与 UTC 的偏移量。
不算太差:
ZoneOffset baseOffset = dateTimeWithBaseOffset.getOffset();
ZoneOffset additionalOffset = dateTimeWithOffsetFromBase.getOffset();
ZoneOffset correctedOffset = ZoneOffset.ofTotalSeconds(baseOffset.getTotalSeconds()
+ additionalOffset.getTotalSeconds());
OffsetDateTime correctedDateTime = dateTimeWithOffsetFromBase.toOffsetDateTime()
.withOffsetSameLocal(correctedOffset);
System.out.println(correctedDateTime);
使用您的示例日期时间打印
2017-12-28T18:30+08:00
如果您想要 UTC 时间:
correctedDateTime = correctedDateTime.withOffsetSameInstant(ZoneOffset.UTC);
System.out.println(correctedDateTime);
这将打印您要求的日期时间:
2017-12-28T10:30Z
对于具有偏移量的日期时间,我们不需要使用ZonedDateTime
, OffsetDateTime
will do 并且可以更好地向读者传达我们正在做什么(ZonedDateTime
不过也可以)。