在config/application.rb中,我在文件中有"config.time_zone ='UTC'"(没有引号).我假设这是为了将用户输入视图的时间转换为存储在数据库中的UTC.我的问题是,如何将数据库中的UTC值转换为用户的本地时间以在视图中显示?我已经读过rails会自动解决这个问题 - 我怎么告诉它这样做?
我在数据库的每个用户行中都有一个时区字段,我只是不确定在那里存储什么.我知道耙时间:区域:全部 - 我只是不知道所有这些在轨道3中如何组合在一起!
谢谢,
SK
Rad*_*sky 16
在多区域环境中工作时,将时区设置为UTC是明智的.这在你的application.rb中完全有效
Rails会自动将所有时间转换为当前时区,可以设置
Time.zone = "some-zone"
Run Code Online (Sandbox Code Playgroud)
我使用的是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
Run Code Online (Sandbox Code Playgroud)
当您查看数据库时,您会发现该值为星期六,2010年9月25日11:45:46 UTC.
至于区域价值,我更喜欢城市的名称,因为它可以顺利地进行夏令时(夏季/冬季).