hibernate查询返回错误的日期

lhcgjxsq  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(310)

当我从mysql表中检索一个日期时,它总是返回前一天的日期,日期格式是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上的前一天打印的。
这就是我在servlet上获取日期并使用hibernate在mysql上存储日期的方法。

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

我在mysql中使用的数据类型是date。然后我使用hibernate来为我做剩下的事情,如果你需要任何我没有提供的代码,请问我。提前打电话。
抱歉英语不好!

wr98u20j

wr98u20j1#

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

SELECT @@global.time_zone;

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

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

记住将其设置为所需的时区。您需要重新启动mysql才能进行更改。这种变化将是永久性的。

osh3o9ms

osh3o9ms2#

我发现需要做什么,我改变了hql查询,我不知道确切的原因,但当我这样做

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

很管用!!!!

相关问题