Postgresql
將 UTC 時間轉換為 timestamptz 總是在 Postgres 中添加 +01 偏移量
在 Postgres 9.5 中,我執行以下操作將 a 轉換
timestamptz
為 UTC 時區:SELECT TIMESTAMP WITH TIME ZONE '2016-02-20 15:15:54.000495+01' AT TIME ZONE 'UTC'
這正確輸出
2016-02-20 14:15:54.000495
為timestamp without timezone
.我想將此值儲存在
timestamptz
列中。但是,當我執行以下操作時:SELECT (TIMESTAMP WITH TIME ZONE '2016-02-20 15:15:54.000495+01' AT TIME ZONE 'UTC')::timestamptz
我希望
2016-02-20 14:15:54.000495
得到timestamptz
.但是,這個查詢給了我
2016-02-20 14:15:54.000495+01
astimestamptz
,遺憾的是它甚至不代表原始時間。這種行為的原因是什麼?我怎樣才能使它正常工作?
一個簡單的 from
timestamp
totimestamptz
假定您目前的時區。如果您希望演員採用 UTC(或任何其他時區),則必須AT TIME ZONE
再次使用該構造:SELECT (timestamptz '2016-02-20 15:15:54.000495+01' AT TIME ZONE 'UTC') AT TIME ZONE 'UTC';
您可能會錯過
AT TIME ZONE
有兩個不同的案例。它可以轉置timestamptz
,timestamp
反之亦然。相關答案及詳細解釋:請注意,您的陳述沒有意義:
我希望
2016-02-20 14:15:54.000495
得到timestamptz
.的文本表示
timestamptz
始終根據您目前的時區設置*顯示為本地時間,並以 UTC 偏移量進行擴展。*您顯示的文字沒有偏移量,因此它是timestamp
文字,而不是timestamptz
. 這裡的基礎: