在 Ubuntu 与 Windows 上运行时 Java 时间减少 1 小时

Posted

技术标签:

【中文标题】在 Ubuntu 与 Windows 上运行时 Java 时间减少 1 小时【英文标题】:Java time off by 1 hour when run on Ubuntu vs Windows 【发布时间】:2020-05-25 20:02:46 【问题描述】:

我有一个使用 Spring Boot 用 Ja​​va + 编写的微服务。我使用 Java 版本 1.8.0_221 在 Windows 10 上开发它。现在我想在 Ubuntu 18.04 上运行它。在 Ubuntu 机器上,我有 OpenJDK 1.8.0_40-b25。

当我在 Windows 机器上运行它时,控制台消息上显示的时间(我使用 log4j2 打印它们)和我保存在数据库中的时间(在日期字段上使用 @CreatedDate 和 @TemporalType.TIMESTAMP)注释)是正确,我的 ZoneId.systemDefault 是 Europe/Istanbul。

在我的 Ubuntu 机器上也是欧洲/伊斯坦布尔。

但是,当我在 Ubuntu 机器上运行它时,时间比我在终端上键入“日期”得到的系统时间晚 1 小时。我打印到控制台的所有日志时间和我的数据库插入都关闭了一小时。

我搜索了其他类似的问题,但他们都关注时区,我不认为在程序的任何部分我都在修改时区。另外我的 Ubuntu 时间是正确的,这让我可能需要用 JVM 改变一些东西?

【问题讨论】:

windows和ubuntu显示的系统时间是否相等? 不确定:土耳其在 2019 年更改了其 DST 设置,您的 Ubuntu 18.04 可能不知道。我对土耳其时间或语言环境特定数据的 java 更新没有经验,但这将是一种非常平淡的解释。检查 UTC 时间。 是的,土耳其确实停止了夏令时,但我的 ubuntu 时间是正确的。我认为 java 只会占用操作系统的时间。 Java 有自己的时区数据库。 这些注解是来自 Spring Data 而不是 Spring Boot?如果是这样,你应该编辑你的标签和文本来讲述整个故事。 【参考方案1】:

我已尝试在回答此问题this 后更新时区数据库,但无法使其正常工作。所以我决定删除 OpenJDK 并安装 Oracle JDK 8,它现在可以正常工作了。

【讨论】:

您知道使用 OracleJDK 必须支付年费吗? 不知道!我想我会尝试让 OpenJDK 工作。

以上是关于在 Ubuntu 与 Windows 上运行时 Java 时间减少 1 小时的主要内容,如果未能解决你的问题,请参考以下文章

微软又出招: Windows 10 支持 Ubuntu 容器啦

在 Ubuntu 20.04 上安装 React JS 时出错(也在 Windows 10 上)

在 Windows 上运行 ubuntu 上的 bash 运行 npm 命令给出错误“/usr/bin/env: node: No such file or directory”

微软在 Windows 10 上支持 Ubuntu 容器

在ubuntu上运行php artisan migrate时没有这样的文件或目录[重复]

在ubuntu上运行php artisan migrate时没有这样的文件或目录[重复]