【问题标题】:Cannot get right time value from mysql ddbb in java无法从 java 中的 mysql ddbb 获取正确的时间值
【发布时间】:2021-06-11 07:05:04
【问题描述】:

我有一个带有几个 TIME 列字段的 MySQL 表。现在,在每一行中,字段都包含存储的时间数据,例如 16:45:00 和 17:30:00,当我从 MySQl Workbench 进行一些查询时,我可以看到它是正确的。

问题是当我想用java.sql.Time 从 DDBB 取回数据时。值更改为 09:45:00 和 10:30:00。我不明白为什么。我尝试使用TimeZoneCalendar 和许多其他可能的解决方案,但什么都没有……它不起作用。

¿有什么想法吗?提前致谢。

【问题讨论】:

  • 您是否尝试过使用 vm 参数?示例:-Duser.timezone="UTC"
  • 我建议你不要使用java.sql.Time。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time APILocalTime。有关如何从 MySQL 中检索 LocalTime,请参阅 my answer here

标签: java mysql time


【解决方案1】:

避免使用旧的日期时间类

永远不要使用java.sql.Time。该类在设计上存在缺陷,是多年前被现代 java.time 类取代的糟糕日期时间类的一部分。

Sun、Oracle 和 JCP 社区在采用 JSR 310 后放弃了传统的日期时间类。您也应该这样做。

LocalTime

相反,使用java.time.LocalTime 从仅包含日期时间的数据库列中检索数据,不包含日期,不包含时区或与 UTC 的偏移量,这是一种类似于 SQL 标准 TIME 类型的数据类型.在 MySQL 8 中,类型为 TIME

LocalTime lt = myResultSet.getObject( … , LocalTime.class ) ;

使用此类代码不会有任何时区问题。存储的值是检索到的值。没有插入干预的默认时区。

JDBC 4.2 规范要求所有兼容的驱动程序都支持java.time.LocalTime

JPA 和 Hibernate 等库已更新为支持 java.time 类。

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 2017-07-05
    • 2017-08-15
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2018-02-11
    相关资源
    最近更新 更多