gpt4 book ai didi

java - WebLogic 中什么控制时区到 GMT 偏移映射?

转载 作者:行者123 更新时间:2023-12-02 08:51:11 26 4
gpt4 key购买 nike

我面临一个不寻常的问题。

在 Oracle WebLogic 生产中部署的应用程序已开始出现错误。应打印为 24 Mar 00:00:00 EDT 2020 的日期将打印为 23 Mar 23:00:00 EST 2020

其他 WebLogic 服务器日志(不是来 self 们的应用程序)也以 EST(东部标准时间)而不是 EDT(东部夏令时间)打印。

这只发生在生产中。

应用程序转储到其日志的时区在所有环境中都是正确的(即“America/New_York”)。我检查了两个环境中的 $JRE_HOME/lib/tzdb.dat 文件,它们是相同的。

有谁知道这可能是什么原因造成的?

最佳答案

JVM 默认时区设置已更改

这是一个猜测,但完全一致。带有时区缩写(EST 或 EDT)的日期和时间很可能使用 JVM 的默认时区。因此,您的生产 WebLogic 服务器中的默认时区设置已更改。服务器中运行的任何程序都可以做到这一点。即使是在同一 JVM 中的 WebLogic 外部运行的程序也可以(如果有的话)。随时。

默认时区是在启动时从系统属性 user.timezone 设置的(或者 JVM 中的程序第一次对时区执行任何操作时,我不确定)。稍后更改 JVM 的默认时区不会影响系统属性。简短演示:

    System.setProperty("user.timezone", "America/New_York");

TimeZone.setDefault(TimeZone.getTimeZone("America/Atikokan"));

System.out.println("TimeZone.getDefault(): " + TimeZone.getDefault().getID());
System.out.println("user.timezone: " + System.getProperty("user.timezone"));
System.out.println("Example java.util.Date: " + new Date());

在我的计算机上运行此代码片段会产生以下输出:

TimeZone.getDefault(): America/Atikokan
user.timezone: America/New_York
Example java.util.Date: Thu Mar 19 14:18:03 EST 2020

您注意到 user.timezone 打印为 America/New_York,但最后一行提到 EST,因此不同意 America/New_York,如果我没记错的话,这将暗示 EDT

PS 通常我会完全不鼓励使用 TimeZone 类,因为它设计得很糟糕并且已经过时了。我需要它来进行演示,因为现代 Java 日期和时间 API java.time 不提供更改 JVM 时区设置的选项(据我所知)。也许他们做出了明智的选择,不包括它,因为 - 正如你所看到的 - 这样做很容易引起困惑。

关于java - WebLogic 中什么控制时区到 GMT 偏移映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60761165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com