2014-01-22 29 views
0

因此,我存儲了一個時區感知時間,比如12箇中午在莫斯科說作爲2014-01-22 12:00:00+04。我想返回,但如果我只是撥打select my_timestamp from my_table,它將返回2014-01-22 08:00:00+00。我有一個timezone列可用與時區的olson名稱(在這種情況下europe/moscow),有沒有什麼辦法可以構造一個選擇,返回我確切的對象,我輸入其時區保留,而不是它轉換爲我的服務器的本地時間(格林威治標準時間)?我看了一下提到at time zone函數的postgres文檔,但沒有成功讓它在返回時保留時區信息。使用本地utc偏移量選擇一個tz意識到的時間戳

+0

Erwin Brandstetter回答了一段很棒的回答,您可能會發現它很有用:http://stackoverflow.com/a/9576170 – bma

+0

感謝bma,這是一個非常全面的細分。令人遺憾的是,我想我必須將時間存儲爲天真,畢竟與我的時區結合在我的應用代碼中。 – bbm

回答

1

不,沒有辦法做到這一點。 PostgreSQL不存儲插入或更新值的客戶端的偏移量。

如果將偏移量存儲在單獨的列中,則可以將其與時間戳值連接起來,但對於涉及夏令時的特定條件,您可能會返回錯誤的值。

使用AT TIME ZONE語法以及正確的時區應該爲您提供正確的時間戳值,但不包括最初插入或更新時間戳記的客戶端的偏移量。

+0

作爲一個說明,是開發人員的建議沒有專門提到沒有日期組件的'時間'?我正在使用帶時區的時間戳。 – bbm

+0

@bbm:是的,謝謝你指出。我不知道我在想什麼。 –

0

看是否有此反正幫助:

SELECT now(), now()::timestamp, now() AT TIME ZONE 'europe/moscow', now()::timestamp AT TIME ZONE 'europe/moscow' 

您可以同時區之間的轉換。不給你的時區+ 04,但給你在那個時區的時間。

相關問題