在我的postgresql.conf文件中,我的默認時區設置爲'Europe/London'。爲什麼Postgres無法識別我的DST?
由於夏令時將於10月30日關閉,這意味着現在(我在寫作時10月4日)'歐洲/倫敦'should correspond'+01'。
我有一個dummy
表time
列timestamp with timezone
類型。
對於
timestamp with timezone
,內部存儲的數值總是以UTC(協調世界時,習慣上稱爲格林威治標準時間,GMT)。使用該時區的適當偏移量將具有指定明確時區的輸入值轉換爲UTC。 如果在輸入字符串中沒有聲明時區,則假定它位於系統的TimeZone參數指定的時區中,並使用時區區域的偏移量轉換爲UTC。
至於大膽的一句話,如果我有這樣的插入:
INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000')
我希望它被解釋爲「歐洲/倫敦時區,從而'2016-12-25 12:00:00.000+01'
。
因此,當我檢索它時,我預計會顯示該值(或者至少相當於'2016-12-25 11:00:00.000+00'
)。
相反,如果我做了查詢
SELECT * FROM dummy
我回到這一點:
|time |
|timestamp with time zone|
--------------------------
|2016-12-25 12:00:00+00 |
我不能讓這種行爲的原因。 「歐洲/倫敦」時區的DST管理是錯誤的嗎?我錯過了什麼嗎?
如果我切換到任何其他時區,它總是按預期工作。
你的意思是當我嘗試使用不同的時區時?我只是使用'SET TIME ZONE'命令在會話級更改了tz。 –
@DanieleRepici你的期望並不完整,Postgres將假設'timestamptz'2016-12-25 12:00:00:00歐洲/倫敦',確實是'2016-12-25 12:00:00:00'(即Postgres將使用**時區**,而不是其當前的**偏移量**)。 – pozs
@pozs所以基本上你是說它沒有考慮當前時間來推斷這種情況下的正確偏移量。這種行爲是否在某處指定?至於引用文檔中的粗體句子,爲了進行轉換,Postgres應該問自己:「好的,」歐洲/倫敦「時區的偏移量是多少?」這實際上取決於當前的時間。 –