使用JPA CriteriaBuilder API将LocalDate字段(例如’2017-09-27′)保存到mySQL Date列时,结果不同(例如’2017-09-26′).
我已经使用SELECT TIMEDIFF(NOW(),UTC_TIMESTAMP)验证我的数据库的时区设置为UTC,结果是’00:00:00′.
我在本地测试这个,我有一个GMT 2的时区,所以我怀疑当从LocalDate转换到Date时,会扣除2个小时并在请求的日期前1天生成一个日期(假设LocalDate字段由于没有时间信息,因此被视为00:00:00.
在这种情况下保存LocalDates的最佳方法是什么?我应该遵循这里的建议https://stackoverflow.com/a/29751575/3832047并明确地将所有LocalDate字段设置为UTC或类似的东西吗?
我运行了一个测试,看看在代码中转换它们会发生什么,得到以下结果:
Date convertedDate = Date.valueOf(localDate);
编辑
这是我用来检索数据的代码的示例,其中也发生奇数日期更改.如果我要求2017-06-27的数据,我会收到2017-06-26的结果.
CriteriaBuilder criteriaBuilder = sessionFactory.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(HorseAndTrailerRequest.class);
Root criteria = criteriaQuery.from(HorseAndTrailerRequest.class);
ParameterExpression effectiveDateParameter = criter