【发布时间】:2018-09-23 18:27:22
【问题描述】:
我正在尝试将 XMLGregorianCalendar 中给出的变量转换为 java.time.Instant。此外,原始变量是中部标准时间(美国/芝加哥),我需要它在 UTC 中。这就是我所做的,但它在 UTC-7 中返回一个 Instant:
XMLGregorianCalendar xgc = header.getCaptureDate();
Instant convertedDateTime = xgc.toGregorianCalendar().toInstant().atOffset(ZoneOffset.UTC).toInstant();
我真的很困惑我做错了什么。
xgc 看起来像这样:2018-04-13T06:30:23,我需要这个:2018-04-13T11:30:23Z(Z 添加到末尾,加上时区更改)。但是,现在我明白了:2018-04-13T04:30:23Z。
【问题讨论】:
-
完成并感谢您的推荐,注意!
-
所以,它返回 CET,我需要 UTC,这很容易纠正,但我更担心的是,我认为使用时间可能会由于夏令时导致问题,还是我错了?
-
是的,
xgc在 CST(美国/芝加哥)。我的意思是您推荐的.ofHours(-7)解决方案返回了中欧时间的值。如果我将它设置为.ofHours(-5),它可以工作,但我们会遇到 DST 问题 -
也很奇怪,现在我意识到
xgc.toGregorianCalendar().toZonedDateTime().getOffset()返回+2:00,我认为这是主要问题 -
在您的帮助下,我弄清楚了它是如何工作的,所以非常感谢,我仍然需要考虑一下,为什么。如果我将代码更改为:
.toGregorianCalendar().toZonedDateTime().withZoneSameLocal(ZoneId.of("America/Chicago")).toInstant(),它可以工作,我认为它应该随时正确