如果在使用JDK 1.6的同一应用程序服务器上运行的并发应用程序调用{{1}},会发生什么?
正如TimeZone #setDefault changes in JDK 6中所讨论的那样,呼叫现在会改变整个VM,这可能会产生可怕的后果。
如果您没有管理应用程序服务器,如何确保TimeZone不会更改?
答案 0 :(得分:3)
我的建议是完全忽略默认时区。始终指定您要使用的时区,这使得更难以意外地使用对您有意义的东西而不是用户。实际上,对于Noda Time我们已经删除了默认时区的所有内容。
强制性的Joda参考:我还建议使用Joda Time而不是内置的日期/时间API。
答案 1 :(得分:0)
阻止TimeZone.setDefault(...)
具有VM范围效果的方法是确保SecurityManager
不授予应用程序编写"user.timezone"
系统属性的权限。
要了解原因,请查看the source code。
现在,依赖Javadoc中没有记录的行为可能有点顽皮。但在这种情况下,我们别无选择。此外,鉴于这种特殊方法的历史,Sun / Oracle工程师不太可能再次改变其行为。