JVM 未在服务器中进行夏令时更改

Posted

技术标签:

【中文标题】JVM 未在服务器中进行夏令时更改【英文标题】:JVM not taking Daylight Time changes in the server 【发布时间】:2020-06-08 13:51:06 【问题描述】:

我们有 4 台服务器在生产中,它们的所有时间都使用 NTP(网络时间协议)服务器进行同步,所有这些服务器都在新西兰,作为 Daylight 的一部分,服务器被提前到 1 小时,即 + 1200 到 +1300,但似乎所有使用 JVM 的应用程序都达到了 +1200。

所以我写了一段代码来显示时间,并且确认 JVM 没有采用夏令时。有关此行为的任何建议或解释。之间我不想建议重新启动服务器作为其生产框。

我们使用的是 ibmJDK 而不是 Oracle JDK。

【问题讨论】:

你试过Timezone Updater Tool吗? nop 但是,正如我所说,它们是生产环境,但首先为什么 JVM 不会占用 systemTime?,在我们使用 ibmJDK 而不是 Oracle JDK 之间,所以我不是确定那个 Oracle Timezone Updater 工具。 你的一段代码来显示时间,你是在正在运行的生产服务器中运行它还是作为一个单独的 Java 程序运行它?后者似乎表明问题出在这些盒子上的所有 JVM 上,而前者没有。 好吧,我们在那个盒子里只有一个 JRE,我只是用命令行运行了那个片段 JVM 运行在什么操作系统上,服务器的时区设置是什么?如果这是 Windows,请给我们TZUtil /g 的输出。如果这是 Linux,请给我们cat /etc/timezone 的输出。谢谢。 【参考方案1】:

您所指的特定夏令时规则最近是否发生了变化或已经存在多年?

Java 使用自己的内部时区数据库,而不是系统的。

检查服务器上的 java 时区数据库是否是最新的。 如果没有,那么您可能需要考虑更新 JDK - 特别是如果您运行的是旧版本。

您可以在此处找到更多详细信息:https://www.oracle.com/technetwork/java/javase/timezones-137583.html

此表还可以帮助您找到特定版本的时区数据库(但我不确定 IBM JDK 特定的东西):https://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html

【讨论】:

以上是关于JVM 未在服务器中进行夏令时更改的主要内容,如果未能解决你的问题,请参考以下文章

我所在国家/地区的夏令时已更改,但 C#/Windows 无法识别更改

如果日期是进行 DST(夏令时)更改的实际日期,有没有办法在 Python 中推断?

组件未在商店更改时更新 - Vuex

Delphi NOW 函数的结果如何受“调整时钟以进行夏令时更改”选项的影响

如何更改 p:calendar 组件中的夏令时 (DST) 日期

如何在android中检测夏令时转换