【问题标题】:How can I get operating system Time zone in Java?如何在 Java 中获取操作系统时区?
【发布时间】:2017-11-16 13:12:16
【问题描述】:

TimeZone.getDefault() 返回系统时区,直到它被更改。

样本 1:

System.out.println(TimeZone.getDefault());

结果:

Europe/Kaliningrad

是系统时区。

示例 2:

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(TimeZone.getDefault());

结果:

Asia/Kolkata

不是系统时区,系统时区还是欧洲/加里宁格勒。

那么,即使在更改默认 DateTimeZone 之后,我如何才能获得系统时区。

【问题讨论】:

  • @user7294900,它返回亚洲/加尔各答而不是欧洲/加里宁格勒
  • 您期待什么?当您调用 setDefault 时,它会更改整个 JVM 的默认时区,这是预期的行为。如果您不想更改它,请不要调用setDefault(或在更改默认值之前将时区保存在变量中,如下面的答案中已建议的那样)。
  • @Hugo,无论JVM上设置了哪个时区,我都想获取系统时区(为操作系统设置)。

标签: java timezone


【解决方案1】:

可以查看系统属性user.timezone:

   System.getProperty("user.timezone")

【讨论】:

  • 它为我返回空字符串。
【解决方案2】:

在下面的代码之前将 TimeZone.getDefault() 的值存储在一个变量中

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Kolkata"));
System.out.println(TimeZone.getDefault());

稍后再使用该变量。

【讨论】:

  • 希望有更漂亮的解决方案。
  • @Evgenia TimeZone.setDefault 会覆盖系统时区,因此将系统时区存储在变量中似乎是不错的选择。
猜你喜欢
  • 2012-04-18
  • 2020-01-07
  • 1970-01-01
  • 2015-10-13
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
相关资源
最近更新 更多