【问题标题】:Java time off by 1 hour when run on Ubuntu vs Windows在 Ubuntu 与 Windows 上运行时 Java 时间减少 1 小时
【发布时间】: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?如果是这样,你应该编辑你的标签和文本来讲述整个故事。

标签: java windows spring-boot ubuntu time


【解决方案1】:

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

【讨论】:

  • 您知道使用 OracleJDK 必须支付年费吗?
  • 不知道!我想我会尝试让 OpenJDK 工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多