web-dev-qa-db-ja.com

postgresqlのUTCタイムゾーンをEST(現地時間)に変換します

私は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
31
Subu Ganesh

ここロンドンでは、現在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の入門書を手に入れたいでしょう。

38
Richard Huxton

同様に実行する

SELECT '2015-10-24 16:38:46'::timestamp AT time zone 'EST';

timezone
------------------------
 2015-10-24 21:38:46+00
(1 row)
13
Kevin Li

日付のメイン参照は常にUTCで保存し、クエリでタイムゾーンに変換するか、データの特定のタイムゾーンバージョンを別の列に保存する必要があります。これは、保存されているタイムゾーンがUTCであることがわかっている限り、UTCから別のタイムゾーンに日付をすばやく簡単に変換できるためです。それから推測作業がかかります。または、タイムゾーンを使用して日付を保存できます。

日付にサーバーのシステムクロックを自動的に入力する操作がある場合、A:UTC時間を使用するように操作を変更するB:サーバーのシステムクロックをUTCに変更する

0
user33072