2010-09-25 72 views
9

在config/application.rb我有「config.time_zone ='UTC'」(不帶引號)在文件中。我假設這是將用戶輸入到視圖中的時間轉換爲存儲在數據庫中的UTC。我的問題是,如何將數據庫中的UTC值轉換爲用戶的本地時間以顯示在視圖中?我已經讀過,軌道自動處理 - 我怎麼告訴它做到這一點?顯示本地時間在視圖

我在數據庫中的每個用戶行中都有一個時區字段,我只是不確定在那裏存儲什麼。我知道耙子時間:區域:所有 - 我只是不知道所有這些如何在軌道3中相互配合!

謝謝

SK

回答

15

在多區域環境中工作當它是明智的,有時區設置爲UTC。這是一個在你的application.rb中完全有效的

Rails會自動變換所有的時間到當前時區,可與

Time.zone = "some-zone" 

設置我用的是的before_filter在ApplicationController中,我根據當前用戶設置時區。然後所有的操作都在這個區域內工作,你不需要在你的controllers/models/views中考慮它。

假設您有一些帶有某些日期時間字段的模型Foo。然後在IRB控制檯工作:

Time.zone = "Prague" 
x = Foo.create(:it_will_happen_at => Time.zone.now) 
x.it_will_happen_at # => Sat, 25 Sep 2010 13:45:46 CEST +02:00 

Time.zone = "London" 
# it is needed to refresh the field after a time zone has changed. 
# In normal situation it'd not be needed, it's just for this console example 
x.reload 
x.it_will_happen_at # => Sat, 25 Sep 2010 12:44:46 BST +01:00 

當你看看到數據庫,你會發現,值是星期六,2010 11點45分46秒UTC 9月25日。

至於區域價值,我更喜歡城市名稱,因爲它可以在夏令時(夏令時/冬令時)順暢運行。

+0

謝謝 - 你的建議完美無缺! – dingalingchickenwiing 2010-09-26 02:12:34

+0

節省了我的時間!應該早點找到它。 – 2014-06-19 19:12:08