[英]Distinguishing between times during a daylight savings changeover
我正在查看從英國時區提供的一些輸出,這些輸出跨越了夏令時轉換(對於任何不知道的人,在 10 月的最后一個星期日的早上,重復凌晨 1 點以減去一個小時,同樣在最后一個星期日3 月,它向前移動 1 小時)。 output 顯示出現在 go 的事件在時間上倒退 - 顯然這是小時重置的結果,但是沒有任何時間偏移列表,確定正確時間的唯一合乎邏輯的方法是查看它們的順序。 我知道 Postgres 在 UTC 內部存儲帶有時區的時間戳,但是當指定時區時,偏移量被省略,例如
select
'2019-10-27 00:30:00 UTC'::timestamptz at time zone 'Europe/London' time1,
'2019-10-27 01:30:00 UTC'::timestamptz at time zone 'Europe/London' time2,
'2020-03-29 00:30:00 UTC'::timestamptz at time zone 'Europe/London' time3,
'2020-03-29 01:30:00 UTC'::timestamptz at time zone 'Europe/London' time4;
您可以在下面看到 10 月的轉換將在 00:30 和 01:30 期間給出完全相同的時間,但它不顯示時區偏移量,因此無法區分兩者之間的差異。
time1 | time2 | time3 | time4
---------------------+---------------------+---------------------+---------------------
2019-10-27 01:30:00 | 2019-10-27 01:30:00 | 2020-03-29 00:30:00 | 2020-03-29 02:30:00
這顯然不僅僅是一個僅影響 Postgres 的問題,而且 output 是一個不使用偏移量的日志文件,因此沒有明確的方法來追溯時間。 我很幸運,訂單確實說明了差異,但假設在這樣的 2 小時內只有一個事件,那么將來處理這個(合理不規則的)問題的最佳做法是什么? 只能在這些期間顯示偏移量還是有其他解決方案?
解決方案很簡單:不要記錄本地時間戳。
將時區信息與時間戳一起記錄或在記錄之前將它們轉換為 UTC:
SET timezone = 'Europe/London';
select
'2019-10-27 00:30:00 UTC'::timestamptz time1,
'2019-10-27 01:30:00 UTC'::timestamptz time2,
'2020-03-29 00:30:00 UTC'::timestamptz time3,
'2020-03-29 01:30:00 UTC'::timestamptz time4;
time1 | time2 | time3 | time4
------------------------+------------------------+------------------------+------------------------
2019-10-27 01:30:00+01 | 2019-10-27 01:30:00+00 | 2020-03-29 00:30:00+00 | 2020-03-29 02:30:00+01
(1 row)
select
'2019-10-27 00:30:00 UTC'::timestamptz at time zone 'UTC' time1,
'2019-10-27 01:30:00 UTC'::timestamptz at time zone 'UTC' time2,
'2020-03-29 00:30:00 UTC'::timestamptz at time zone 'UTC' time3,
'2020-03-29 01:30:00 UTC'::timestamptz at time zone 'UTC' time4;
time1 | time2 | time3 | time4
---------------------+---------------------+---------------------+---------------------
2019-10-27 00:30:00 | 2019-10-27 01:30:00 | 2020-03-29 00:30:00 | 2020-03-29 01:30:00
(1 row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.