5

这似乎是一个常见问题,所以也许我遗漏了一些明显的东西。使用 Joda Time 我想保留带有时区的日期。如果我不使用 JPA,我会想做这样的事情来保存和检索时间戳:

create table test_dates
(
  zone varchar(50),
  ts_with_time_zone timestamp with time zone
);

insert into test_dates values ('UTC', '2012-08-12 12:34:56 UTC');
insert into test_dates values ('MST', '2012-08-12 05:34:56 MST');

select 'UTC in MST', ts_with_time_zone at time zone 'MST' 
    from test_dates where zone = 'UTC';

那么如何使用 Joda Time、JPA、EclipseLink 和 Postgres 以指定时区保存和检索这些时间戳?

我已经看到使用转换器的答案,但我不确定您将如何指定或使用时区。当然,我可以获取 UTC 时间并自己进行转换,但这违背了拥有“带时区”列的目的。这可能吗?

理想的解决方案是 EclipseLink 处理 JodaTime 类似于hibernate

4

2 回答 2

1

您可以自定义 PostgreSQLPlatform 以添加对通过 JDBC 存储时区的支持。您的 JDBC 驱动程序必须支持时区(很可能通过自定义类型或日历 API)。

EclipseLink 确实支持 Oracle 上的时区,因此如果数据库和 JDBC 驱动程序支持它,它应该可以扩展 PostgreSQLPlatform 的时区。

于 2012-12-10T15:33:49.837 回答
0

您不保存时区。您只需使用输入字符串中指定的时区保存时间戳。不会保存时区。

select '2012-08-12 12:34:56 UTC'::timestamp with time zone;
      timestamptz       
------------------------
 2012-08-12 09:34:56-03

select '2012-08-12 05:34:56 MST'::timestamp with time zone;
      timestamptz       
------------------------
 2012-08-12 09:34:56-03

时区将是数据库时区。

select now()::timestamp with time zone;
              now              
-------------------------------
 2012-12-10 12:26:16.318484-02
于 2012-12-10T14:28:45.777 回答