Timezone
在 Redshift 中使用特定格式將 UTC 時間轉換為本地時間
我有一個名為
created_at
儲存在 UTC 中沒有時區的數據的列,例如:2017-02-05 15:43:27.151
我想以特定格式轉換為其他時區,如 CET:
2017-02-08 16:43:27 +01:00
我成功將時間轉換為特定時區,但需要指定輸入的時區。查詢看起來像:
SELECT created_at, (created_at AT TIME ZONE 'UTC') AT TIME ZONE 'CET' AS cet FROM my_table; [ { "created_at" : "2017-02-08 15:43:27.151", "cet" : "2017-02-08 16:43:27.151" } ]
但我未能從時區程式碼中提取或生成時區偏移量。
我試過了
SELECT EXTRACT(TIMEZONE_HOUR FROM (SELECT '2017-02-08 15:43:27.151' AT TIME ZONE 'CET')); [ { "date_part" : 0 } ]
如何獲得
2017-02-08 16:43:27 +01:00
?編輯 1:
SHOW timezone; --utc SELECT current_timestamp; -- 2017-02-09 11:00:20.225039+00 SELECT to_char(current_timestamp AT TIME ZONE 'CET', 'YYYY-MM-DD HH24:MI:SS OF'); -- 2017-02-09 12:00:35 +00
為什麼偏移量是 00?(我使用
OF
是因為我在 Redshift 上)?的 | 與 UTC 的偏移量;僅對 TIMESTAMPTZ 有效
來自文件
編輯2:我想把
AT TIME ZONE 'CET'
日期改成timestamptz,但我錯了。您需要轉換日期,::timestamptz
然後OF
將顯示 UTC 偏移量。SELECT to_char((current_timestamp AT TIME ZONE 'CET')::timestamptz, 'YYYY-MM-DD HH24:MI:SS OF'); --2017-02-09 14:48:48 +01
現在我需要添加
:00
.
搜尋 Redshift 文件後:
我終於做到了:
SELECT to_char((current_timestamp AT TIME ZONE 'CET')::timestamptz, 'YYYY-MM-DD HH24:MI:SS OF') || ':00' AS created_at -- 2017-02-09 15:10:15 +01:00
時間戳需要轉換為預期的時區
AT TIME ZONE ...
,然後使用時區進行轉換,否則OF
將不會顯示 UTC 偏移量。我
:00
在驗證時區無法顯示帶有分鐘的時區後添加:SELECT pg_timezone_names();
SELECT '2017-02-08 15:43:27.151' AT TIME ZONE 'CET' - '2017-02-08 15:43:27.151' AT TIME ZONE 'UTC'