【发布时间】:2020-01-24 07:28:22
【问题描述】:
外部 API 返回一个带有日期的对象。
根据他们的 API 规范,所有日期始终以 GMT 报告。
但是,生成的客户端类(我无法编辑)没有正确设置时区。相反,它使用本地时区而不将日期转换为该时区。
所以,长话短说,我有一个我知道是 GMT 日期的对象,但它显示的是 CET。如何在不更改计算机上的本地时区或执行以下操作的情况下调整此错误:
LocalDateTime.ofInstant(someObject.getDate().toInstant().plus(1, ChronoUnit.HOURS),
ZoneId.of("CET"));
谢谢。
【问题讨论】:
-
您能提供像可解析
Strings 这样的示例值吗?收到的日期时间看起来如何?它是String还是Date或LocalDateTime甚至ZonedDateTime的实例? -
它已经是一个 java.util.date-object(我没有解析任何东西,提供和生成的客户端类会错误地这样做,如所述)。
-
因此,例如,我的 date object.toString() 将返回 Fri Jan 24 09:15:00 CET 2020,而实际上应该是 Fri Jan 24 09:15:00 GMT 2020 或 Fri Jan 24 10 :15:00 CET 2020
-
@ChristophStrehl a
java.util.Date没有时区。它以 JVM 的默认时区打印。因此,如果您在 CET 中,它将在 CET 中打印。如果他们返回java.util.Date,“根据他们的 API 规范,所有日期总是以 GMT 报告”是不可能的。 -
@AndyTurner 我认为这是事实的一半。现在已弃用的
getTimeZoneOffset()方法意味着最初java.util.Date类被设计为在技术上也包含有关时区的信息。