2016/09/19

PostgreSQL 使用的 timestamp 變更 timezone 很簡單



PostgreSQL 使用的 timestamp 變更顯示的 timezone 很簡單

只要把 select 欄位後方加上  AT TIME ZONE 'EST'  就可以
這裡的  'EST' 指的是美東時間,縮寫可以參考官方說明。
https://www.postgresql.org/docs/8.1/static/datetime-keywords.html 

範例SQL:
SELECT id, transaction_time,to_char((transaction_time AT TIME ZONE 'CCT')  , 'YYYY-MM-DD  HH24:MI:SS' )  as cct_transaction_time,
 to_char((transaction_time AT TIME ZONE 'EST')  , 'YYYY-MM-DD  HH24:MI:SS' )  as est_transaction_time 
 FROM root_memberdepositpassbook WHERE member_id = '45'  ORDER BY est_transaction_time DESC LIMIT 10;


https://www.postgresql.org/docs/9.5/static/functions-formatting.html 
關於欄位的輸出格式官方網站也有說明,可以讓你以你想的方式輸出。直接再 SQL 敘述指定就可以。








-- 北京時間
SELECT enrollmentdate, to_char((enrollmentdate AT TIME ZONE 'posix/Etc/GMT-8'),'YYYY-MM-DD HH24:MI:SS') as enrollmentdate_tz FROM root_member WHERE id = '45';
-- 美東時間
SELECT enrollmentdate, to_char((enrollmentdate AT TIME ZONE 'posix/Etc/GMT+5'),'YYYY-MM-DD HH24:MI:SS') as enrollmentdate_tz FROM root_member WHERE id = '45';
-- 東京時間
SELECT enrollmentdate, to_char((enrollmentdate AT TIME ZONE 'posix/Etc/GMT-9'),'YYYY-MM-DD HH24:MI:SS') as enrollmentdate_tz FROM root_member WHERE id = '45';
-- 列出目前系統的時區列表 ,指列出標準 postfix 的資訊。
select * from pg_timezone_names where name like '%posix/Etc/GMT%'

在 time with timezone 格式中,如果這樣表示時區 +08 的紀錄
2016-07-23 04:24:33.503622+08
* 如果要分別生成屬於美東時間 UTC-05 
* 以及中原標準時間 UTC +08 
* 東京時間 UTC +09
那使用的 timezone addrev 對照的欄位,帶入前面的 參數。
* 中原標準時間 UTC +08 對應  posix/Etc/GMT-8
* 美東時間 UTC-05 對應 posix/Etc/GMT+5
* 東京時間 UTC +09 對應 posix/Etc/GMT-9

則取出後的時間,就是當地的時間了。



沒有留言: