【问题标题】:wrong date(one day less) in hibernate from db从数据库休眠的错误日期(少一天)
【发布时间】:2018-01-13 08:29:50
【问题描述】:

以下是数据库中的日期:

  • created_time
  • 2018-01-02 04:30:00.756

下面是代码:

List<Date> dataList=new ArrayList<Date>();
query= "SELECT createdTime FROM TableName";
…
…

dataList=selectQuery.list();
for(Object data[] : dataList) {
    System.out.println("Date and time -> "+data[2]); //getting one day less than the original 
}

如果日期是02-01-2018,我会得到01-01-2018

【问题讨论】:

  • 检查数据库和计算机的默认时区。
  • 你使用hql还是原生sql查询?你也能说明你是如何在实体中映射日期的吗?
  • 您使用早已过时的Date 类有什么特别的原因吗?较新的 Hibernate 可以使用 java.time.LocalDate。如果您的问题可能与时区有关,那么这将消除它。而且 java.time 更好用。此外,如果您只对日期感兴趣,而不是一天中的时间,请在数据库中使用数据类型 date。
  • 大家好,感谢您的快速回复。我正在使用本机 SQL。日期基列是日期类型,时区是 UTC。我观察到的是,它一直显示一天的时间变少。
  • @pramagouni,您是说您的date(不是datetime)类型的数据库列的值是2018-01-02 04:30:00.756?这对我来说听起来很奇怪。

标签: java hibernate date


【解决方案1】:

我使用 LocalDatejava.time 更改了我的实体,而不是使用 Datejava.util 更改了我的实体,因为我在我的 MySQL docker 容器中遇到了同样的问题。

为了解决问题,我从 MySQL 配置文件中更改了配置,但得到了相同的结果,然后在查看网站https://thorben-janssen.com/hibernate-jpa-date-and-time/ 时,我发现了一个比较 Java 类型和 JDBC 时间的表。 根据表格,我将Date更改为LocalDate,现在可以正常使用了。

【讨论】:

    【解决方案2】:

    您获得的日期可能包含时区信息, 所以请确保数据库使用您的代码运行时区
    或者更好地使用 UTC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 2013-08-30
      • 2019-03-13
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多