2010-09-25 60 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