【问题标题】:DateTime is not being saved when TImeZone is set in application.rb在 application.rb 中设置 TImeZone 时,不会保存 DateTime
【发布时间】:2013-06-23 07:52:40
【问题描述】:

我今天遇到了一个问题,这让我有点困惑。
每当我尝试将 DateTime 保存到数据库时,它似乎都可以工作 - 但一旦我尝试再次检索它,我就会返回 nil
这不仅发生在我正在保存的记录上,还发生在 created_atupdated_at 字段上。 我能够通过删除

来追踪它
    config.time_zone = "Bern"
    config.active_record.default_timezone = "Bern"

来自我的 application.rb - 它似乎再次完美运行。

有什么方法可以解决这个问题,并将记录保存在我的(伯尔尼)时区?

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-4


    【解决方案1】:

    我怀疑“Bern”不是 Rails 的有效时区标识符,这就是问题所在。

    根据comments on this answer,可以使用以下命令查看有效时区ID:

    rails c - ActiveSupport::TimeZone.all.map(&:name)
    

    但是,我强烈建议您不要将时间戳存储在您的本地时区 - 将它们存储在 UTC 中,然后在适当的情况下转换为用户的本地时区。除此之外,这还避免了夏令时转换的问题。

    【讨论】:

    • 根据该列表,“伯尔尼”是一个有效的时区——我怀疑它也是“欧洲/伯尔尼”。感谢您详细说明这个问题,是的,不将它们与当地时间一起存储是非常有意义的。
    • @mlang:嗯。如果相关的话,Europe/Bern 不是一个有效的 TZDB ID。查看api.rubyonrails.org/classes/ActiveSupport/TimeZone.html 有一个从“伯尔尼”到“欧洲/柏林”的映射。我承认我不是 Rails 人,甚至不是 Ruby 人,所以我不完全清楚哪个位做什么......
    • 嗯.. 我明白了,我可能需要简单地使用“Europe/Berlin”。但是我打算将它存储在 UTC 中,这也使它更容易维护。我不知道我在想什么在当地时间存储数据。
    • @mlang:好的,很酷 - 如果它完全不需要获取正确的时区,那肯定会更好:)(我预计你可能需要它在另一个方向显示,例如。)祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 2021-11-12
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多