System.setProperty("user.timezone","America/Chicago")之间的区别; 和TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago"));

use*_*375 6 java timezone

  1. System.setProperty("user.timezone","America/Chicago");
  2. TimeZone.setDefault(TimeZone.getTimeZone( "美国/芝加哥"));

两者有什么区别?哪一个更好/建议设置时区?

Bij*_*men 2

查看代码,差异本质上在于何时设置 TimeZone 默认值 -

在第一种情况下,默认值在第一次调用 TimeZone 类时生效(本质上是懒惰的) - 比如说TimeZone.getDefault(),此时 被TimeZone.setDefault调用,被user.timezone查找并设置默认值。

在第二种情况下,默认值是急切设置的 - 当您显式调用时TimeZone.setDefault

我认为这是唯一的区别,任何一个在实践中都应该工作得很好。

更新java.util.TimeZone这是课堂 上的代码

对 TimeZone.getDefault() 的第一次调用具有此流程,它涵盖了您的第一点。

TimeZone.getDefault()
    -> TimeZone.setDefaultZone() (lookup "user.timezone" , set class variable and return timezone)
          -> return defaulttimezone
Run Code Online (Sandbox Code Playgroud)

下次调用 getDefault() 时,它只返回类变量

在 TimeZone.setDefault(timeZone) 的情况下,defaultTimeZone正在设置 defaultTimeZone = zone;并返回类级别变量。