【发布时间】:2012-09-02 03:43:34
【问题描述】:
似乎(也许我错了)如果您想保留 JDBC 和 Postgres 发生某些事情时的时区,您需要将时区与时间戳分开存储。
也就是说,我宁愿给我的 ORM/JDBC/JPA 一个 Java Calendar(或 Joda DataTime),其中时区 America/New_York 到 Postgres timestampz 字段。并且无论服务器时区(或默认为 UTC)如何,我都希望在检索时给我一个 Calendar 和时区 America/New_York。但只看大多数 JDBC 代码(以及依赖它的事情不会发生)。
这是正确的吗?
当 postgres 支持时,我需要将 tz 存储在另一个字段中,这似乎很荒谬。
因此,似乎只有两个选项:
- 选择
timestampzPostgres 列作为java.util.String并对其进行解析。 - 将时区存储为单独的字段。
第一个和第二个选项将需要某种类型的转换拦截器用于我的 SQL 映射/ORM 库。
- 什么是 JDBC 的最佳解决方案?
- JPA 的最佳解决方案是什么(如果不同于 JDBC)?
【问题讨论】:
-
当您存储
timestamptz时,它会转换为 UTC 以存储在数据库中。检索到时,它会转换为客户端的当前时区,而不是它最初所在的时区。基本上是一个时间点。
标签: java postgresql jpa jdbc