【问题标题】:Display local time in view在视图中显示当地时间
【发布时间】:2010-09-25 10:02:11
【问题描述】:

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

我在数据库中每个用户的行中都有一个时区字段,我只是不确定要在那里存储什么。我知道 rake time:zones:all - 我只是不知道所有这些如何在 rails 3 中组合在一起!

谢谢,

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    在多区环境中工作时,最好将时区设置为 UTC。这在您的应用程序中完全有效。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 
    

    查看数据库时,您会发现该值为 Sat, 25 Sep 2010 11:45:46 UTC。

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

    【讨论】:

    • 节省了我的时间!!早该发现的。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多