Java 使用Hibernate时获取UTC时区中的日期

Java 使用Hibernate时获取UTC时区中的日期,java,spring,hibernate,datetime,Java,Spring,Hibernate,Datetime,我在我的项目中使用SpringBoot和Hibernate5以及MySQL 如何从数据库中以UTC而不是JVM的时区获取日期时间 是否有任何配置要添加到应用程序.properties中,如jadira.usertype.javaZone用于jadira或其他一些技巧?您可以在启动应用程序时将JVM的默认时区设置为UTC,如 TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC")); 这将确保在应用程序中移动、保存到db、从db检索等时,日期始终以

我在我的项目中使用SpringBoot和Hibernate5以及MySQL

如何从数据库中以UTC而不是JVM的时区获取日期时间


是否有任何配置要添加到
应用程序.properties
中,如
jadira.usertype.javaZone
用于jadira或其他一些技巧?

您可以在启动应用程序时将JVM的默认时区设置为UTC,如

TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));

这将确保在应用程序中移动、保存到db、从db检索等时,日期始终以UTC为单位。。并且可以在需要时转换为任何所需的时区。

您可以从数据库中获取日期并将其转换为UTC

Date localTime = getDateFromDB();
String format = "yyyy/MM/dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(format);

sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date gmtTime = new Date(sdf.format(localTime));

要为所有日期字段设置UTC,请将以下字段添加到MySQL连接字符串:

useTimezone=true
serverTimezone=UTC
useLegacyDatetimeCode=false
jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC&useLegacyDatetimeCode=false
连接字符串示例:

useTimezone=true
serverTimezone=UTC
useLegacyDatetimeCode=false
jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC&useLegacyDatetimeCode=false

使用jadira用户类型为特定字段设置UTC

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime",
    parameters = { @Parameter(name = "databaseZone", value = "UTC")})
private DateTime dateTime;

谢谢大家的帮助,我试过Arul Kumaran和Sanj的解决方案,但效果不好。因此,我选择将日期存储为varchar,并使用转换器将其作为ZoneDateTime来获取。自Hibernate 5.2以来,您现在可以使用configuration属性

基本上,现在可以使用以下配置属性为所有
时间戳
时间
列强制设置UTC时区:

<property name="hibernate.jdbc.time_zone" value="UTC"/>


您知道从数据库中出来的时区吗?如何使用批注?您不需要使用批注。这是一个全局设置。在设置上述属性时,我使用Hibernate作为JPA供应商适配器。我得到的错误是peroperty无效``这是因为您没有使用
JPA属性
。你读过Spring框架手册吗?谢谢,我已经完成了正确的配置,时区现在可以工作了<代码>UTC