代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

使用JDK 1.6的应用服务器上的时区setDefault()。

  •  1
  • Christopher Klewes  · 技术社区  · 14 年前

    如果发生了什么 #setDefault(TimeZone timezone) 由使用JDK 1.6在同一应用服务器上运行的并发应用程序调用

    正如在 TimeZone #setDefault changes in JDK 6 呼叫现在在虚拟机范围内发生变化,这可能会产生可怕的后果。

    如果您不管理应用服务器,如何确保时区不会更改?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    14 年前

    我的建议是完全忽略默认时区。始终指定要使用的时区,这会使意外使用对您有意义的内容而不是用户更加困难。确实,为了 Noda Time 我们删除了所有默认时区的内容。

    强制性的Joda参考:我也建议使用 Joda Time 而不是内置的日期/时间API。

        2
  •  0
  •   Stephen C    14 年前

    防止 TimeZone.setDefault(...) 在虚拟机范围内产生的效果是确保 SecurityManager 不授予应用程序写入 "user.timezone" 系统属性。

    要了解原因,请看 the source code .

    现在,依赖JavaDoc中没有记录的行为有点淘气。但在这种情况下,我们别无选择。此外,考虑到这种特殊方法的历史,Sun/Oracle工程师不太可能改变它的行为…又一次。