2016-10-04 74 views
0

在我的postgresql.conf文件中,我的默認時區設置爲'Europe/London'。爲什麼Postgres無法識別我的DST?

由於夏令時將於10月30日關閉,這意味着現在(我在寫作時10月4日)'歐洲/倫敦'should correspond'+01'。

我有一個dummytimetimestamp with timezone類型。

Postgres specs狀態:

對於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管理是錯誤的嗎?我錯過了什麼嗎?

如果我切換到任何其他時區,它總是按預期工作。

+0

你的意思是當我嘗試使用不同的時區時?我只是使用'SET TIME ZONE'命令在會話級更改了tz。 –

+0

@DanieleRepici你的期望並不完整,Postgres將假設'timestamptz'2016-12-25 12:00:00:00歐洲/倫敦',確實是'2016-12-25 12:00:00:00'(即Postgres將使用**時區**,而不是其當前的**偏移量**)。 – pozs

+0

@pozs所以基本上你是說它沒有考慮當前時間來推斷這種情況下的正確偏移量。這種行爲是否在某處指定?至於引用文檔中的粗體句子,爲了進行轉換,Postgres應該問自己:「好的,」歐洲/倫敦「時區的偏移量是多少?」這實際上取決於當前的時間。 –

回答

1

您輸入的時間戳,解釋爲Europe/London時區。

十二月二十五日,倫敦將從UTC時間抵消0小時,所以中午12:00將在UTC。

時區Europe/London不是與時區+01相同,至少不是所有的時間。

+0

從昨天開始我就陷入了這個問題,謝謝。這是如此平凡 –

相關問題