我升级到 Rails 3.2 和 Ruby 1.9.3,我得到了一个非常奇怪的行为
我有一个名为 Entry 的模型。当一个新的条目被创建时,它会被插入到具有当前日期和时间的数据库中。
但是当我运行 Entry.find_by_id(THE_ENTRY_ID).created_at
时,我得到了在日期时间创建的“正确”,但在不同的时区中,例如:
在数据库中:
2013-03-24 00:05:29
在 Rails 控制台和应用程序中:
Sat, 23 Mar 2013 20:05:29 EDT -04:00
为什么突然返回错误的时区?
最佳答案
阅读 DOCS 并看到此 rails cast 后确定: http://railscasts.com/episodes/106-time-zones-revised
现在一切都清楚了。
config.time_zone = 'Eastern Time (US & Canada)'
此设置是负责将所有时间对象转换为当前时区的实际设置。这就是我将其视为 -4 的方式
此设置:
config.active_record.default_timezone
是决定如何在数据库中保存时间的那个,但是......它只有 2 个可能的值::local 和 :UTC,默认值是 :UTC
当我使用 Rails 控制台查看我的条目时,显示的时间是在转换为“东部时间”之后,为了查看存储在数据库中的实际日期,请使用:
created_at_before_type_cast
它返回默认的 UTC 时间
以及我认为在数据库中它存储在我的时区 +2 中的原因 是因为我使用了 MySQL Workbench,它的 GUI 只向我显示了本地机器时间中的日期时间值。
总结:
真正重要的设置:
config.time_zone
它工作得很好。 通过 DOCS 很重要
关于ruby-on-rails - Rails 3.2 + Ruby 1.9.3,created_at 返回时区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593803/