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

标签 java timezone

  1. System.setProperty("user.timezone", "America/Chicago");
  2. 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/

相关文章:

java - 二维数组复制列和行,并证明包含是否等于

sql - 甲骨文 SQL : get timezone for a given date

c# - 使用可移植类库将东部标准时间字符串转换为 UTC 日期时间

java - 获取时区的TimeZoneID

java - Android正则表达式从网站抓取图像url

java - 映射我的 bean 时 Hibernate 配置文件中出现异常

java - 这个 getGeneratedKeys() JDBC 语句有什么问题?

java - 如何获取Keycloak用户的角色和属性

php - 如何根据访问者的位置显示本地化时间?

Python/Django MySQL 日期时间处理和时区