【发布时间】:2020-05-25 20:02:46
【问题描述】:
我有一个使用 Spring Boot 用 Java + 编写的微服务。我使用 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