私はPostgreSQLを初めて使用しますが、関数を使用してテーブルのタイムスタンプ値を別のタイムゾーンに変換する直接的な方法があるかどうか疑問に思っていました。私の場合、UTCはESTです。
これらは、たとえば、ESTに変換する必要がある値です(1つの値だけでなく、テーブル内のすべての値)
date
-------------------
2015-10-24 16:38:46
2016-01-19 18:27:00
2016-01-24 16:14:34
2016-02-09 23:05:49
2016-02-11 20:46:26
ここロンドンでは、現在UTCより1時間進んでいます。したがって、タイムスタンプなしでタイムゾーンを取得し、UTCであると言うと、ローカルタイムゾーンで印刷されます。
richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC');
timezone
------------------------
2015-10-24 17:38:46+01
(1 row)
しかし、返される値から判断すると、アメリカ大陸のどこかにあると思われる「EST」が必要です。必要に応じて、小さなSQL関数で式をラップできます。
richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC') AT TIME ZONE 'EST';
timezone
---------------------
2015-10-24 11:38:46
(1 row)
編集:クエリでそれを行う方法
SELECT ((stored_timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'EST') AS local_timestamp
FROM my_table;
この種のことがあなたに問題を引き起こしているなら、あなたはおそらくSQLの入門書を手に入れたいでしょう。
同様に実行する
SELECT '2015-10-24 16:38:46'::timestamp AT time zone 'EST';
timezone
------------------------
2015-10-24 21:38:46+00
(1 row)
日付のメイン参照は常にUTCで保存し、クエリでタイムゾーンに変換するか、データの特定のタイムゾーンバージョンを別の列に保存する必要があります。これは、保存されているタイムゾーンがUTCであることがわかっている限り、UTCから別のタイムゾーンに日付をすばやく簡単に変換できるためです。それから推測作業がかかります。または、タイムゾーンを使用して日付を保存できます。
日付にサーバーのシステムクロックを自動的に入力する操作がある場合、A:UTC時間を使用するように操作を変更するB:サーバーのシステムクロックをUTCに変更する