Java 使用Hibernate时获取UTC时区中的日期
我在我的项目中使用SpringBoot和Hibernate5以及MySQL 如何从数据库中以UTC而不是JVM的时区获取日期时间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检索等时,日期始终以
是否有任何配置要添加到
应用程序.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