2012-02-05 81 views
2

我一直在抨擊我的頭靠在Rails中時區的一段時間。這裏是問題:Rails的時區問題

我希望用戶能夠輸入到time_select場本地時間(例如9:30 AM)。根據用戶選擇的時區,這應該存儲在數據庫中作爲UTC(例如上午9:30 EST保存爲14:30)

然後,它只是使用Time.zone正確顯示它的問題。

然而,似乎time_select創建多參數分配值的散列是假定用戶輸入的時間爲UTC。無論我嘗試什麼,我都無法強迫它進入用戶的當地時間。例如:

ruby-1.9.2-p290 :016 > Time.use_zone("Eastern Time (US & Canada)") do 
ruby-1.9.2-p290 :017 >  a.attributes = {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"} 
ruby-1.9.2-p290 :018?> end 
=> {"starttime(1i)"=>"2000", "starttime(2i)"=>"1", "starttime(3i)"=>"1", "starttime(4i)"=>"09", "starttime(5i)"=>"30"} 
ruby-1.9.2-p290 :019 > a.starttime 
=> 2000-01-01 09:30:00 UTC 

我見過建議使用config.time_zone,但我想這爲跨多個時區用戶的工作,所以站點範圍配置設置似乎並不像正確的解決方案。

我如何保存在數據庫中的UTC用戶提供的價值?

謝謝!

回答

1

以下Railscasts情節是偉大的解釋如何,如果你是一個親成員做到這一點:

http://railscasts.com/episodes/106-time-zones-revised

它基本上使用相同的方法,因爲本·W公司的做法,而是採用了左右過濾器代替之前的過濾器。 Time.zone有可能是線程安全的,所以這可能是不必要的,但我仍然會這樣做。