在config / application.rb中,我在文件中有“config.time_zone ='UTC'”(没有引号)。我假设这是为了将用户输入视图的时间转换为存储在数据库中的UTC。我的问题是,如何将数据库中的UTC值转换为用户的本地时间以在视图中显示?我已经读过rails会自动解决这个问题 - 我怎么告诉它这样做?
我在数据库的每个用户行中都有一个时区字段,我只是不确定在那里存储什么。我知道耙时间:区域:全部 - 我只是不知道所有这些在轨道3中是如何组合在一起的!
谢谢,
SK
答案 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。
至于区域价值,我更喜欢城市的名称,因为它可以顺利地进行夏令时(夏季/冬季)。