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 ドライバーはタイム ゾーンをサポートする必要があります (ほとんどの場合、カスタム タイプまたは Calendar 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 に答える