2016-03-31 70 views
0

我們只是改變了時區,這給了我與數據庫 一個問題(我現在是在時區GMT + 2)。Qt和PostgreSQL的時區

我要檢查的東西開始時,我使用此查詢:

SELECT *,extract(epoch from start at time zone 'cet') as start_, extract(epoch from stop at time zone 'cet') as stop_ from czas; 

,它是錯的,因爲我的start_/stop_爲1小時以上:即應爲16,而不是17和「CET」應該是取而代之的是'cest'。

我發現QTimeZone類,它應該顯示當前短區域名稱(cet/cest),但是當我使用它是這樣的:

QDateTime now = QDateTime::currentDateTime(); 
QTimeZone zone_; 
qDebug()<<"ZONE: "<<zone_.displayName(now,QTimeZone::ShortName); 

我得到一個空字符串。

有沒有人有一個想法,爲什麼?

回答

1

我不能回答爲什麼QT是不是做你的期望。

Perhapse我可以跟你解決開始是使用正確的時區問題的問題幫助嗎?對於這個PostgreSQL提供了一些設置到國家的時區名稱,而不是小時數偏移量。例如'Europe/London'指定'GMT'冬季時間戳和'BST'夏季時間戳。

這些名單已經在9.x中手動移除,但在8.1手動名單可以在這裏找到:

http://www.postgresql.org/docs/8.1/static/datetime-keywords.html

對於系統使用以下方法來獲得完整列表時區名稱:

select * from pg_timezone_names; 

我不知道其中哪些是最適合你的應用程序,但如你的代碼可以改爲:

SELECT *,extract(epoch from start time zone 'Europe/Paris') as start_, extract(epoch from stop at time zone 'Europe/Paris') as stop_ from czas; 
+0

它的工作原理!輕鬆將'cet'改爲'歐洲/巴黎'作品! – blackmoon