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 中推断?
Delphi NOW 函数的结果如何受“调整时钟以进行夏令时更改”选项的影响