簡體   English   中英

在夏令時轉換期間區分時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM