2016-03-31 188 views
11

我是PostgreSQL的新手,我想知道是否有一種直接方式將表中的時間戳值轉換爲使用函數的不同時區。在我的情況下,這是UTC至EST。將postgresql中的UTC時區轉換爲EST(當地時間)

這些例如,我需要轉換爲EST(不只是一個值,而是在表中的所有值)

date 
------------------- 
2015-10-24 16:38:46 
2016-01-19 18:27:00 
2016-01-24 16:14:34 
2016-02-09 23:05:49 
2016-02-11 20:46:26 
+0

旁註:你可能想使用''美國/ New_York''(從[IANA時區數據庫(https://en.wikipedia.org/wiki/ Tz_database))作爲您的時區,而不是「EST」。三個字母的縮寫是不精確的(你真的是指UTC-0400,還是你想在夏天期間使用UTC-0300?),並且經常在多個國家甚至一個國家重複播放(阿拉斯加和波多黎各的時區通常都是都標有「AST」) –

回答

20

在倫敦的價值觀,我們目前領先UTC的1小時。所以 - 如果我把你的時區沒有時間戳,並說它是在UTC,我會打印我的當地時區。

richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC'); 
     timezone   
------------------------ 
2015-10-24 17:38:46+01 
(1 row) 

但是,你想要「美國東部時間」,似乎在美洲的某個地方,通過返回的價值判斷。如果您願意,可以將表達式包裝在一個小小的SQL函數中。

richardh=> SELECT ((timestamp '2015-10-24 16:38:46') AT TIME ZONE 'UTC') AT TIME ZONE 'EST'; 
     timezone  
--------------------- 
2015-10-24 11:38:46 
(1 row) 

編輯:如何做一個查詢

SELECT ((stored_timestamp AT TIME ZONE 'UTC') AT TIME ZONE 'EST') AS local_timestamp 
FROM my_table; 

你可能會想要得到SQL入門書,如果這樣的事情導致您的問題。

+0

非常感謝。但是,這個功能只是爲了自定義時間戳值,對吧?如果我需要更改表中的所有行,但不只是一個值,我該怎麼做? –

3

同樣 執行

SELECT '2015-10-24 16:38:46'::timestamp AT time zone 'EST'; 

timezone 
------------------------ 
2015-10-24 21:38:46+00 
(1 row) 
+0

這是否要求您的數據庫默認設置爲默認UTC? – benjimin

+0

benjimin是的。因爲當Postgres運行這個命令時,它會將時間戳值轉換爲EST,然後顯示在您設置的時區中。類似於@Richard Huxton的答案的第一部分。他們將時間戳轉換爲「UTC」,但顯示爲+01。 –

相關問題