在config/application.rb文件中,我有“config.time_zone ='UTC'”(不带引号)。我假设这是要进行从输入 View 的用户时间到存储在数据库中的UTC的转换。我的问题是,如何将UTC值从数据库转换为用户的本地时间以显示在 View 中?我已经读过Rails会自动处理该问题-如何告诉它执行此操作?
我在数据库的每个用户行中都有一个时区字段,我只是不确定也要在其中存储什么。我知道前刀时间:区域:全部-我只是不知道所有这些在 rails 3中如何组合在一起!
谢谢,
sk
最佳答案
在多区域环境中工作时,将时区设置为UTC是明智的。这在您的application.rb中是完全有效的
Rails将自动将所有时间转换为当前时区,可以使用
Time.zone = "some-zone"
我使用的是ApplicationController中的 before_filter ,在其中我根据当前用户设置了时区。然后,所有操作都在该区域内进行,而您无需在 Controller /模型/ View 中考虑它。
假设您有一些带有日期时间字段的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
当您查看数据库时,您会发现该值为Sat,25 Sep 2010 11:45:46 UTC。
至于区域值,我更喜欢城市的名称,因为它可以与夏令时(夏季/冬季)一起正常工作。
关于ruby-on-rails - 在 View 中显示本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793324/