TimeZone#setDefault()在具有JDK 1.6的应用程序服务器上

时间:2010-04-20 09:35:33

标签: java datetime timezone

如果在使用JDK 1.6的同一应用程序服务器上运行的并发应用程序调用{​​{1}},会发生什么?

正如TimeZone #setDefault changes in JDK 6中所讨论的那样,呼叫现在会改变整个VM,这可能会产生可怕的后果。

如果您没有管理应用程序服务器,如何确保TimeZone不会更改?

2 个答案:

答案 0 :(得分:3)

我的建议是完全忽略默认时区。始终指定您要使用的时区,这使得更难以意外地使用对您有意义的东西而不是用户。实际上,对于Noda Time我们已经删除了默认时区的所有内容。

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

答案 1 :(得分:0)

阻止TimeZone.setDefault(...)具有VM范围效果的方法是确保SecurityManager不授予应用程序编写"user.timezone"系统属性的权限。

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

现在,依赖Javadoc中没有记录的行为可能有点顽皮。但在这种情况下,我们别无选择。此外,鉴于这种特殊方法的历史,Sun / Oracle工程师不太可能再次改变其行为。