Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.setProperty(“user.timezone”和“America/Chicago”之间的差异;和TimeZone.setDefault(TimeZone.getTimeZone(“America/Chicago”); System.setProperty(“用户时区”、“美国/芝加哥”) TimeZone.setDefault(TimeZone.getTimeZone(“美国/芝加哥”)_Java_Timezone - Fatal编程技术网

Java System.setProperty(“user.timezone”和“America/Chicago”之间的差异;和TimeZone.setDefault(TimeZone.getTimeZone(“America/Chicago”); System.setProperty(“用户时区”、“美国/芝加哥”) TimeZone.setDefault(TimeZone.getTimeZone(“美国/芝加哥”)

Java System.setProperty(“user.timezone”和“America/Chicago”之间的差异;和TimeZone.setDefault(TimeZone.getTimeZone(“America/Chicago”); System.setProperty(“用户时区”、“美国/芝加哥”) TimeZone.setDefault(TimeZone.getTimeZone(“美国/芝加哥”),java,timezone,Java,Timezone,这两者的区别是什么?设置时区时,哪一个更好/推荐?查看代码,区别主要在于何时设置时区默认值- 在第一种情况下,默认值在第一次调用TimeZone类时生效(基本上是惰性的)-例如TimeZone.getDefault(),此时调用TimeZone.setDefault,查找user.TimeZone,并设置默认值 在第二个场景中,当您显式调用TimeZone.setDefault 我认为这是唯一的区别,两者在实践中都应该很好 更新 这是来自java.util.TimeZone类的代码 对TimeZ

这两者的区别是什么?设置时区时,哪一个更好/推荐?

查看代码,区别主要在于何时设置时区默认值-

在第一种情况下,默认值在第一次调用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并返回。

最大的区别应该是“user.timezone”属性和时区的默认时区分别存储

参见JavaSE8文档

主要的一点是
TimeZone.getDefault
可以使用“user.TimeZone”属性作为其初始值,但该值将被缓存。这意味着对“user.timezone”的以下更改不会影响
timezone.getDefault
。并且
TimeZone.setDefault
不会更改“user.TimeZone”属性

如果不确定代码或第三方库所依赖的是哪一个,则最好同时设置:

System.setProperty("user.timezone", "America/Chicago");
TimeZone.setDefault(null); // or TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago"));
例如,它取决于“user.timezone”属性和
timezone.getDefault
,并且“user.timezone”优先。见:


你看的是什么代码?我在看System.java和TimeZone.java,但我听不懂你说的。您可以展开吗?根据我在
java.util.TimeZone
类中看到的内容进行更新。这是基于JDK1.7源代码的。时区中的代码不是那么容易跟进,但我想我可以理解你所说的。你提到不应该有任何(剧烈的)区别。我在谷歌上搜索了一个推荐的方法,但什么也没找到。您是否碰巧看到Sun/Oracle推荐的设置时区的方法?
try {
    String id = System.getProperty("user.timezone");
    if (id != null) {  // null check avoids stack overflow
        zone = forID(id);
    }
} catch (RuntimeException ex) {
    // ignored
}
if (zone == null) {
    zone = forTimeZone(TimeZone.getDefault());
}