- System.setProperty("user.timezone", "America/Chicago");
- TimeZone.setDefault(TimeZone.getTimeZone("美国/芝加哥"));
两者有什么区别?哪个更好/推荐设置时区?
最佳答案
查看代码,主要区别在于何时设置 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
下次调用 getDefault() 时,它只返回类变量
在 TimeZone.setDefault(timeZone) 的情况下,正在设置类级变量 defaultTimeZone
:
defaultTimeZone = zone;
并返回。
关于java - System.setProperty ("user.timezone"和 "America/Chicago"之间的区别;和 TimeZone.setDefault(TimeZone.getTimeZone ("America/Chicago"));,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907119/