在视图中显示当地时间

在config / application.rb中,我在文件中有“config.time_zone =’UTC’”(没有引号)。 我假设这是为了将用户输入到视图中的时间转换为存储在数据库中的UTC。 我的问题是,如何将数据库中的UTC值转换为用户的本地时间以在视图中显示? 我已经读过rails会自动解决这个问题 – 我怎么告诉它这样做?

我在数据库的每个用户行中都有一个时区字段,我只是不确定在那里存储什么。 我知道耙时间:区域:全部 – 我只是不知道所有这些如何在轨道3中组合在一起!

谢谢,

SK

在多区域环境中工作时,将时区设置为UTC是明智的。 这在你的application.rb中完全有效

Rails会自动将所有时间转换为当前时区 ,可以设置

Time.zone = "some-zone" 

我使用的是ApplicationController中的before_filter ,我根据当前用户设置时区。 然后,所有操作都在此区域内运行,您无需在控制器/模型/视图中考虑它。

假设您有一些具有日期时间字段的模型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年9月25日11:45:46 UTC。

至于区域价值,我更喜欢城市的名称,因为它可以顺利地进行夏令时(夏季/冬季)。