Java 使用JDK 1.6的应用程序服务器上的时区#setDefault()

Java 使用JDK 1.6的应用程序服务器上的时区#setDefault(),java,datetime,timezone,Java,Datetime,Timezone,如果使用JDK1.6在同一应用服务器上运行的并发应用程序调用了#setDefault(TimeZone TimeZone),会发生什么情况 正如调用now changes VM wide中所讨论的,这可能会产生可怕的后果 如果您没有管理应用程序服务器,如何确保时区不改变?我的建议是完全忽略默认时区。始终指定您要使用的时区,这样就很难意外地使用对您而不是用户有意义的东西。事实上,我们已经删除了所有默认时区的内容 强制性Joda参考:我还建议使用而不是内置的日期/时间API。防止时区。setDefa

如果使用JDK1.6在同一应用服务器上运行的并发应用程序调用了
#setDefault(TimeZone TimeZone)
,会发生什么情况

正如调用now changes VM wide中所讨论的,这可能会产生可怕的后果


如果您没有管理应用程序服务器,如何确保时区不改变?

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


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

防止
时区。setDefault(…)
在VM范围内产生影响的方法是确保您的
安全管理器
不允许应用程序编写
user.TimeZone”
系统属性

要了解原因,请查看


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

是的,我也建议使用Joda时间,但不幸的是这不可能(在我的情况下)。默认应用程序服务器是否使用
SecurityManager
并避免设置
user.timezone
?@chrsk:老实说,我不知道。即使不使用Joda Time,您也可以尝试确保在相关的时候始终指定时区。你能详细介绍一下你的情况吗?