【问题标题】:TimeZone#setDefault() on application server with JDK 1.6使用 JDK 1.6 的应用程序服务器上的 TimeZone#setDefault()
【发布时间】:2010-04-20 09:35:33
【问题描述】:

如果#setDefault(TimeZone timezone) 被运行在与JDK 1.6 相同的应用服务器上的并发应用程序调用会发生什么

正如TimeZone #setDefault changes in JDK 6 中所讨论的那样,调用现在会更改 VM 范围,这可能会产生可怕的后果。

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

【问题讨论】:

    标签: java datetime timezone


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我也建议使用 Joda Time,但不幸的是它不可能(在我的情况下)。默认应用服务器是否使用SecurityManager并避免设置user.timezone
    • @chrsk:说实话,我不知道。即使不使用 Joda Time,您也可以尝试确保始终在相关时指定时区。您能否详细介绍一下您的情况?
    【解决方案2】:

    防止TimeZone.setDefault(...) 在VM 范围内产生影响的方法是确保您的SecurityManager 不授予应用程序写入"user.timezone" 系统属性的权限。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-11
      • 2021-10-30
      • 2011-08-26
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多