在视图中显示当地时间

时间:2010-09-25 10:02:12

标签: ruby-on-rails

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

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

谢谢,

SK

1 个答案:

答案 0 :(得分:16)

在多区域环境中工作时,将时区设置为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。

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