Hibernate查询返回错误的日期

时间:2018-10-08 18:11:16

标签: java mysql hibernate date simpledateformat

当我从mysql表中检索日期时,它总是返回1天之前的日期,日期格式为yyyy-MM-dd,因此如果我在打印结果时将2018-10-17列为2018- 10-16。如果我使用命令行检查日期,则它们是正确的。 这是Dao类中用于检索日期的方法:

public List<LocalDate> getDates(String username){
    List<LocalDate> dates;
    Query query = manager.createQuery("select date from Calendar where username =:username");
    query.setParameter("username",username);
    dates = query.getResultList();
    return dates;
}

当我打印列表时,所有日期都像我在SQL上一样打印1天。

这是我在servlet上获取日期并使用hibernate将日期存储在mysql上的方式。

String dateString = request.getParameter("date");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate dataInicial = LocalDate.parse(dataInicialString, formatter);

我在mysql中使用的数据类型为DATE。 然后,我请用户休眠为我做其余的工作,如果您需要我未提供的任何代码,请询问我。 提前谢谢。

对不起,英语不好!

2 个答案:

答案 0 :(得分:1)

我发现需要做的事情,我更改了HQL查询,我不知道为什么,但是当我这样做

Query query = manager.createQuery("select DATE_FORMAT(date,'%Y-%m-%d') from Calendar where username =:username");

有效!!!!

答案 1 :(得分:0)

我曾经遇到这个问题,原因在于我的MySQL配置的默认时区。因此,首先通过以下查询来检查您所使用的时区。

SELECT @@global.time_zone;

如果不是所需的时区,请尝试进入MySQL配置文件并添加以下行。

[mysqld]
default-time-zone = '00:00'

请记住将其设置为所需的时区。您将需要重新启动MySQL以进行更改。此更改将是永久性的。