2011-08-19 85 views
4

我試圖圍繞Postgresql時區打印我的頭,而且我似乎無法弄清楚這一點。 EST在美國是「東部標準時間」,通常是UTC-5在Postgresql中,如何在「時區」取消時區偏移量

實施例1:基礎測試

select '08/31/2011 12:00 pm EST'::timestamptz at time zone 'EST'; 
     timezone  
--------------------- 
2011-08-31 12:00:00 

實施例2:偏移量是5

select '08/31/2011 12:00 pm EST' at time zone '+5'; 
     timezone  
--------------------- 
2011-08-31 12:00:00 

實施例3:偏移量是-5

select '08/31/2011 12:00 pm EST' at time zone '-5'; 
     timezone  
--------------------- 
2011-08-31 22:00:00 

顯然,一切是向後。 EST再次... supposed to be UTC-5。現在,我通過文檔搜索,它確實解釋事情是「POSIX」,which is backwards。 (正偏移量在GMT以西,而負偏移量在GMT以東)。

但是,我該如何解決這個問題?在應用層,我總是可以將+符號反轉爲 - 符號,但對我來說這似乎有點混亂。因此,我的最終問題。

在數據庫層(Postgres),有沒有辦法使用「At Time Zone」語法,以便GMT-5對應於EST?或者我只需要在應用程序層反轉所有內容?

回答

2

用作寫入documentation得到正確的行爲間隔數據類型:

在這些表達式中,所需的時區zone可以指定 無論是作爲一個文本串(例如,「PST」)或作爲區間(例如, 區間'-08:00')。

基礎測試:

SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE 'EST'; 
     timezone  
--------------------- 
2011-08-31 12:00:00 
(1 row) 

時區信息:

SELECT * FROM pg_timezone_abbrevs WHERE abbrev LIKE 'EST'; 
abbrev | utc_offset | is_dst 
--------+------------+-------- 
EST | -05:00:00 | f 
(1 row) 

適當偏移-5:

SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE '-05:00'::interval; 
     timezone  
--------------------- 
2011-08-31 12:00:00 
(1 row) 

適當偏移+5:

SELECT '08/31/2011 12:00 pm EST'::timestamptz AT TIME ZONE '+05:00'::interval; 
     timezone  
--------------------- 
2011-08-31 22:00:00 
(1 row) 
+0

感謝。我無法在任何地方找到此功能。你知道你在哪裏瞭解到這個嗎? – Dragontamer5788

+0

@ Dragontamer5788:好的,我在http://postgresql.1045698.n5.nabble.com/Behavior-of-quot-at-time-zone-quot-td1928049.html –

+1

上發現了這個。您的鏈接有Postgresql文檔的鏈接。哦,我想我只是沒有閱讀所有的手冊。感謝您的鏈接,我想我會在下次更仔細閱讀。 – Dragontamer5788