3 回答
TA贡献1786条经验 获得超11个赞
我在为spring-boot使用hibernate. 我在这里使用的数据库是postgreSQL.
正如另一个答案正确指出的那样,您可以hibernate.jdbc.time_zone=UTC像描述一样设置属性。没关系这并没有解决我的问题,所以我不得不JVM在我的spring-boot应用程序主类中借助以下帮助设置默认时区:
@PostConstruct
public void init(){
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // It will set UTC timezone
System.out.println("Spring boot application running in UTC timezone :"+new Date()); // It will print UTC timezone
}
这也应该可以解决您的问题。您可以在此处收集更多信息。
原因
我猜您的问题(检索日期 - 1 天)来自您的特定设置。如果您的应用程序在运行UTC和在GMT + 3它解决了一个提前数据库请求时间戳记,因为应用程序上下文(JVM和Hibernate负责这里)是UTC在数据库方面落后3小时。简单的例子:
2018-12-02 00:00:00 - 3 小时 = 2018-12-01 21:00:00
因为您只关注日期:2018-12-02- 3 小时 =2018-12-01
TA贡献1828条经验 获得超13个赞
在 MySQL...
TIMESTAMP
内部存储 UTC,但根据两个设置转换为/从服务器的时区。通过SHOW VARIABLES LIKE '%zone%';
正确配置检查这些设置,读者可能会看到与作者不同的时间(基于 tz 设置)。
DATE
并DATETIME
接受你给予的任何东西。客户端中的字符串与表中存储的内容之间没有 tz 转换。把它想象成一个存储时钟的图片。读者将看到作者所写的相同时间字符串。
添加回答
举报