【问题标题】:shift in mysql between sql timestamp and the hour I put在 sql 时间戳和我输入的小时之间转换 mysql
【发布时间】:2019-05-18 21:46:29
【问题描述】:

我正在将 intellij 用于 javaee 项目,但我遇到了时间存储问题:我输入的时间与实际存储在 mysql 中的时间之间有 2 小时的偏移。

目前在互联网上的一些搜索没有给出任何结果。

这是我设置 15:30 小时的 java 语句

Bien bien = new Bien(0, "mon super bien #2", 320, 5, 3, true,
                520000, "4 impasse des bleuets",
                LocalDateTime.of(2019, Month.MAY,1,15,30),
                false, bien0.getTypeChauffage(), bien0.getOptions(), bien0.getVille());

你可以在右边的图片中看到存储的时间是13:30!!浪费了 2 个小时。

一些信息:

我住在法国,夏季时间是 UTC+2;所以我把这行放在mysql的my.ini中:

default-time-zone='+02:00'

在 phpmyadmin 中,如果我输入

select now();

我得到了正确的时间。

错误的时间是从 intellij 和 phpmyadmin 得到的。 甚至在更改 mysql 中的默认时区之前就得到了错误的时间。(但是当我更改时区时,先前输入的日期时间被移动了)。 连接字符串很普通,没有任何额外的参数(只有数据库、端口、用户、密码)。

我会继续搜索,但如果有人可以帮助我,那就太好了。

这是 phpMyAdmin 的输出:

【问题讨论】:

  • 为什么不使用ZonedDateTime instea of​​ LocalDateTime
  • 因为它只是一个针对学习的应用程序,我不需要使用全球时间。
  • 永远不要使用LocalDateTime 来代表片刻。这已经讨论过很多次了。发帖前搜索 Stack Overflow。
  • 准确描述数据库中 5he 列的数据类型。

标签: java mysql java-8 timezone


【解决方案1】:

数据库中的时区始终以 UTC 格式存储。我想您没有更改 phpmyadmin 或 intellj 配置中的时区,因此您可以看到原始数据。

如果您还没有找到这个,请查看How do I set the time zone of MySQL?

【讨论】:

  • 我实际上更改了 phpmyadmin 时区,您可以在我的编辑中找到输出。关于 intellij,我在这里和那里更改了一些值(在数据库连接中,在 VM 选项中)
  • @lolveley 你能发布当你尝试插入它时触发的实际 sql 查询吗?您使用什么数据类型来存储日期?
  • 好的,小时以 UTC 格式存储,并从 java 中读取并给出正确的小时:它是自动转换的。我对存储在数据库中的时间很着迷,但正确的时间是由 java 给出的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 2013-08-15
  • 2017-04-06
相关资源
最近更新 更多