Postgresql

將 UTC 時間轉換為 timestamptz 總是在 Postgres 中添加 +01 偏移量

  • February 23, 2016

在 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.000495timestamp 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+01as timestamptz,遺憾的是它甚至不代表原始時間。

這種行為的原因是什麼?我怎樣才能使它正常工作?

一個簡單的 from timestamptotimestamptz假定您目前的時區。如果您希望演員採用 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有兩個不同的案例。它可以轉置timestamptztimestamp反之亦然。相關答案及詳細解釋:

請注意,您的陳述沒有意義:

我希望2016-02-20 14:15:54.000495得到timestamptz.

的文本表示timestamptz始終根據您目前的時區設置*顯示為本地時間,並以 UTC 偏移量進行擴展。*您顯示的文字沒有偏移量,因此它是timestamp文字,而不是timestamptz. 這裡的基礎:

引用自:https://dba.stackexchange.com/questions/130183