2017-02-26 205 views
4

我想获取当前的ZoneOffset我的系统。
我试图做到这一点,但我找不到方法。
此外,我正在寻找一个解决方案,但我没有找到任何。
在Java中可以这样做吗?

Java 8 ZoneOffset - 如何获得当前系统的UTC偏移量

编辑:
我的问题是this不同。我想知道UTC的当前系统,而不是如何在TimeZone偏移表示或TimeZone存储之间进行转换。

+2

[Java TimeZone偏移]的可能重复(http://stackoverflow.com/questions/11399491/java-timezone-offset) –

回答

7

是的,这是可能的:

ZoneOffset.systemDefault().getRules().getOffset(Instant.now()) 

,或者你可以用LocalDateTime实例来替换即时实例:

ZoneOffset.systemDefault().getRules().getOffset(LocalDateTime.now()) 
+3

这两个选项之间有一个关键区别。 “即时”版本将始终提供正确的答案。 LocalDateTime版本会给出[“最佳可用偏移量”](https://docs.oracle.com/javase/8/docs/api/java/time/zone/ZoneRules.html#getOffset-java.time。 LocalDateTime-)。这是因为DST,LocalDateTime可能有两个有效的偏移量,或者没有。 – JodaStephen

7

你的要求有两个部分:

  • 了“偏移我系统“ - 因此您需要系统时区 - ZoneId.systemDefault()
  • “当前” 偏移 - 因此你需要的电流瞬间 - Instant.now()

这些被捆绑在一起使用ZoneRules,得到如下:

ZoneOffset o = ZoneId.systemDefault().getRules().getOffset(Instant.now()); 

对于simplicty,您可能希望使用OffsetDateTime

ZoneOffset o = OffsetDateTime.now().getOffset(); 

这工作,因为OffsetDateTime.now()内部使用ZoneId.systemDefault()Instant.now()

相关问题