Postgresql

將天數添加到時間戳

  • April 27, 2021

我想從時間戳中添加(或更確切地說是減去)天數。

例如,2020-04-13 00:00:00 Europe/Berlin我想減去 20 天,我希望結果是2020-03-24 00:00:00 Europe/Berlin.

如果我跑

select ('2020-04-13 00:00:00 Europe/Berlin'::timestamptz - INTERVAL '20 DAY') AT TIME ZONE 'Europe/Berlin'

我明白了2020-03-23 23:00:00.000000

這似乎是因為 PostgreSQL 減去 20 * 24 hours (在該日期範圍內發生 DST 切換),這與減去 20 days不同。

間隔計算在您的會話設置的任何時區完成。這記錄在這裡

當向帶時區值的時間戳添加間隔值(或從中減去間隔值)時,天數組件將帶時區的時間戳的日期提前或減少指定的天數,保持一天中的時間相同。在夏令時更改(當會話時區設置為辨識 DST 的時區時),這意味著間隔“1 天”不一定等於間隔“24 小時”

我不知道您的會話時區設置為(您可以show timezone;查看),但顯然它不是“歐洲/柏林”。當設置為“歐洲/柏林”時,我得到了您期望的答案。無論您的會話時區設置為什麼,都不會執行 DST,或者不會在相關時間段內實現轉換。如果它在此期間的日子真的是 24 小時。

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