【发布时间】:2019-03-13 10:59:14
【问题描述】:
当我从 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;
}
当我打印列表时,所有日期都是在 1 天前打印出来的,就像我在我的 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 为我做剩下的事情,如果你需要任何我没有提供的代码,请问我。 提前谢谢。
抱歉英语不好!
【问题讨论】:
-
Date和SimpleDateFormat类已过时且设计不佳。较新的 Hibernate 应该能够从数据库中获取日期为LocalDate,我强烈建议您这样做。它解决了您的问题,因为LocalDate既没有时间也没有时区。作为额外的奖励LocalDate和 java.time 中的其他类使用起来要好得多。 java,time is the modern Java date and time API. -
如果您无法更改服务器的时区设置,您可以尝试按照其中一位维护者vladmihalcea.com/… 的说明更改 Hibernate 的设置
-
@OleV.V.我对代码进行了一些更改并更新了问题/帖子,我认为应该是这样,但它仍然是同样的问题,我在将其存储在 mysql ant 之前检查了日期,这是我拥有的日期,我使用了命令行来选择mysql中的日期,它们也是正确的,我使用mysql中的数据类型作为日期,我应该改变它吗?还是仍然需要修复一些代码错误?谢谢你的时间和回答。如果有任何错误,抱歉英语不好
-
很抱歉没有达到预期的效果。恐怕我没有建议,但是您是否告诉我们 MySQL 中的数据类型,有人可能更容易帮助您?
-
@OleV.V.我找到了需要做的事情,我更改了 HQL 查询,我不知道为什么,但是当我从日历中执行 "Query query = manager.createQuery("select DATE_FORMAT(date,'%Y-%m-%d')其中用户名 =:用户名");"有用!!!!并且感谢 LocalDate 建议,使用起来更好!
标签: java mysql hibernate date simpledateformat