java - 为什么Hibernate要改变DataBase中存储的DateTime?

标签 java hibernate datetime java-time

我有无法解决的问题。我正在使用 Hibernate 4.3.9 Finalhibernate-java8 5.0.0.CR3 来处理 jdk8 time。在我的映射文件中,我有类型为 org.hibernate.type.InstantType 的“actualDate”。我将其以日期时间格式存储在数据库中。当我创建这个 java.time.Instant 时,我使用 ZoneId 传递给我的对象。创建 Instant 之后,我将其保存到数据库端,一切正常,但是当我从数据库读取时,Hibernate 这次发生了变化。例如,我有 ZoneId“华沙/波兰”,我存储在数据库值“2015-07-31 09:10:00”中,我在数据库中看到该值。但当我读到它时,它变成了“2015-07-31 07:10:00”。我的意思是,当我读取这个值并将其分配到我的代码中时,它会发生变化。有谁知道为什么吗?

最佳答案

“2015-07-31 07:10:00”是“2015-07-31 09:10:00”的 UTC 转换,因为华沙/波兰与 UTC 相差 +2 小时。

如果您有 DateTimeZone,您可以使用如下所示的调用

public static DateTime convertUTCToDateTimeZone(DateTime dateTime, DateTimeZone timeZone) {
    return dateTime.toDateTime(DateTimeZone.UTC).toDateTime(timeZone);
}

这对我有用,但当然我对你们的系统一无所知。

祝你好运。

关于java - 为什么Hibernate要改变DataBase中存储的DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748292/

相关文章:

java - Spring、Hibernate 实体字段取决于配置文件

hibernate - 哪个版本的 Hibernate 符合 JPA 1.0

java - org.hibernate.MappingException 使用注解

python - 在包含格式为 ('hour' 、 'min' 、 'AM/PM' 的时间元组的列表中查找时间的最大值

java - org.xml.sax.SAXParseException;行号 : 17; columnNumber: 61; Attribute "value" must be declared for element type "property"

java - 如何使用 Maven 运行方法?

Java execute() 与 executeUpdate() 刷新 Postgresql 中的物化 View

Java:不带 toString 的 StringBuffer 到 byte[]

python - 从 pandas 的字符串日期时间列中提取日期

c# - NancyFX 将日期时间反序列化为本地类型