【发布时间】:2012-11-06 00:27:31
【问题描述】:
我在 PostgreSQL 9.1 数据库的 timestamp without time zone 列中有这个日期:
2012-11-17 13:00:00
它应该是 UTC,我已经通过选择它作为 UNIX 时间戳 (EXTRACT epoch) 进行了验证。
int epoch = 1353157200; // from database
Date date = new Date((long)epoch * 1000);
System.out.println(date.toGMTString()); // output 17 Nov 2012 13:00:00 GMT
但是,当我使用 JPA/Hibernate 读取此日期时,出现了问题。这是我的映射:
@Column(nullable=true,updatable=true,name="startDate")
@Temporal(TemporalType.TIMESTAMP)
private Date start;
然而,我得到的Date 是:
17 Nov 2012 12:00:00 GMT
为什么会发生这种情况,更重要的是,我该如何阻止它?
请注意,我只想普遍存储时间点(就像 java.util.Date 所做的那样),我不太关心时区,但我显然不希望它们破坏我的数据。
您可能已经推断,连接到数据库的客户端应用程序是 UTC+1(荷兰)。
此外,列类型timestamp without time zone 的选择是由 Hibernate 在自动生成架构时做出的。那应该是timestamp with time zone 吗?
【问题讨论】:
标签: java hibernate postgresql jpa timestamp