【问题标题】:java Timezone setDefault effectsjava Timezone setDefault 效果
【发布时间】:2012-04-11 02:56:41
【问题描述】:

How to store date/time and timestamps in UTC time zone with JPA and Hibernate 之后,我想将我的应用程序默认时区设置为 UTC。 我的应用程序与其他一些应用程序一起在 linux 服务器上的 tomcat 上运行。 服务器还有其他运行更多应用程序的 tomcat 实例。

Timezone.setDefault(tz) 会影响同一个 tomcat 实例上的其他应用吗?

会影响其他tomcat实例上的其他应用吗?

是否可以仅为应用设置时区?我大致记得一些关于安全管理器设置的内容。

【问题讨论】:

    标签: java tomcat timezone default utc


    【解决方案1】:

    java 中的默认时区设置有点奇怪。默认情况下,如果设置了默认时区,会影响整个jvm。但是,如果您使用 SecurityManager 运行,并且当前安全上下文不允许设置默认值,则 TimeZone.setDefault() 方法将改为设置 thread local 值(因此任何其他代码在同一线程上运行会将此值视为默认值,但 jvm 的其余部分将不受影响)。我认为没有办法为您的“应用程序”设置默认值,除非您可以将应用程序缩小到特定的线程集合(极不可能)。

    【讨论】:

    • 感谢您的详细回答。还有 awwww 废话,将不得不为我的问题找到不同的解决方案......
    • 更糟糕的是,setDefault 的行为随着 Java 4、5 和 6 的各种版本而改变。有关详细信息,请参阅 this answer
    【解决方案2】:

    会为您启动带有 java 选项 -Duser.timezone=GMT 的应用服务器吗?

    【讨论】:

    • 如果您正在运行自己的应用服务器,这是正确的答案。不管你喜不喜欢,你的 JDBC 驱动程序在从你的数据库读取/写入某些数据类型时会考虑你机器的时区。查看 Mark Rotteveel 关于该主题的几个答案:stackoverflow.com/a/13431628/516910stackoverflow.com/a/14070771/516910
    • 我知道他们最终会得到相同的结果,但我会使用 UTC 而不是 GMT
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多