什么控制了WebLogic中时区到GMT偏移的映射?

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

在Oracle weblogic上的生产环境中部署的应用程序已开始出现bug。应该以{{1​​}}的形式打印的日期以DynamoDBMapper的形式打印。

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

这仅在生产中发生。

应用程序转储到其日志中的时区在所有环境中均正确(例如“ America / New_York”)。我在两个环境中都检查了24 Mar 00:00:00 EDT 2020文件,它们是相同的。

有人知道是什么原因造成的吗?

liang88474754 回答:什么控制了WebLogic中时区到GMT偏移的映射?

JVM默认时区设置已更改

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

默认时区是在启动时通过系统属性user.timezone设置的(或者我不确定JVM中的程序第一次使用时区执行任何操作)。稍后更改JVM的默认时区 not 不会在系统属性上恢复工作。进行简短演示:

    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不同,后者暗示{{1} },如果我没记错的话。

PS通常,我会完全不鼓励使用EDT类,因为它的设计很差并且已经过时了。在本演示中,我需要它,因为现代Java日期和时间API java.time没有提供更改JVM时区设置的选项(据我所知)。也许他们通过不包含它来做出明智的选择,因为-如您所见-这样做很容易引起混乱。

本文链接:https://www.f2er.com/2617458.html

大家都在问