我想获取当前系统的ZoneOffset。
我尝试过,但无法找到方法。
此外,我也在寻找解决方案,但没有找到任何有用的信息。
在Java中可能吗?
编辑:
我的问题与这个问题不同。我想知道当前系统的UTC时间,而不是如何在时区偏移表示或时区存储之间进行转换。
您的请求有两个部分:
ZoneId.systemDefault()
Instant.now()
这些使用 ZoneRules
绑定在一起,以获得以下结果:
ZoneOffset o = ZoneId.systemDefault().getRules().getOffset(Instant.now());
为了简单起见,您可能希望使用OffsetDateTime
:
ZoneOffset o = OffsetDateTime.now().getOffset();
这个功能之所以可行是因为 OffsetDateTime.now()
内部同时使用了 ZoneId.systemDefault()
和 Instant.now()
。
没错,这是可能的:
ZoneOffset.systemDefault().getRules().getOffset(Instant.now())
或者您可以将 Instant 实例替换为 LocalDateTime 实例:
ZoneOffset.systemDefault().getRules().getOffset(LocalDateTime.now())
Instant
版本将始终给出正确的答案。而 LocalDateTime
版本将给出 "可用最佳偏移",这是由于夏令时的缘故,在 LocalDateTime
中可能存在两个有效的偏移量,或者根本没有有效的偏移量。 - JodaStephen