2011-08-15 59 views
0

我收集用戶時區以及他們希望在該時區傳送某些內容的時間。對時區和轉換仍感到困惑

我的應用程序設置爲使用曼谷時間。

application.rb中

config.time_zone = 'Bangkok' 

我希望存儲用戶相對已經進入到我的時區的時間。

所以說,例如,用戶選擇了以下內容:

time = "6:00" 
timezone = "(GMT-10:00) Hawaii" 

我想這個時間轉換爲我的應用程序的時間,並將其保存在數據庫中。

我該如何轉換從夏威夷時區的6AM到什麼時候在曼谷?

回答

3

讓我們用你的例子來說明:

config.time_zone = 'Bangkok' 
time = "6:00" 
timezone = "Hawaii" 

你需要做的第一件事就是設置你的應用程序的時區,以用戶選擇了時區:

Time.zone = "Hawaii" 

然後你使用這個新時區來解析時間:

hawaii_time = Time.zone.parse("6:00") 

如果我們現在打印出hawaii_time,我們得到類似的東西(我們有HST -10:00,這意味着它是正確的):

Mon, 15 Aug 2011 06:00:00 HST -10:00 

您現在使用的軌道in_time_zone方法轉換到你的應用程序的時區:

local_time = hawaii_time.in_time_zone(Rails.configuration.time_zone) 

如果我們打印出local_time我們會得到類似的東西(我們有ICT +07:00這是正確的曼谷):

Mon, 15 Aug 2011 23:00:00 ICT +07:00 

現在,我們可以重新設置我們的應用程序的時區回我ts原價值:

Time.zone = Rails.configuration.time_zone 
+0

哇哎呀,這是最令人敬畏的解釋我所見過的答案。絕對真棒。謝謝soooooo了。 – chell

+0

我可以建議你把這個答案投給@chell嗎? –

+0

THanks Joh。我投了票。對不起,我是NOOB。 – chell