Rails 3.2 + Ruby 1.9.3, created_at返回错误的时区



我升级到Rails 3.2和Ruby 1.9.3,我得到一个非常奇怪的行为

我有一个名为Entry的模型。当一个新的条目被创建时,它会被插入到数据库中,并带有当前的日期和时间。

但是当我运行Entry.find_by_id(THE_ENTRY_ID).created_at时,我得到在datetime创建的"正确",但在不同的时区,例如:In the db:

2013-03-24 00:05:29

在Rails控制台中和在应用程序中:

2013年3月23日星期六20:05:29 EDT -04:00

为什么它突然返回错误的时区?

在阅读了DOCS并看到rails的强制转换后:http://railscasts.com/episodes/106-time-zones-revised

现在一切都清楚了。

config.time_zone = 'Eastern Time (US & Canada)'

此设置是负责将所有时间对象转换为当前时区的实际设置。我把它看成-4

这个设置:

config.active_record.default_timezone

决定如何在DB中节省时间,但是…它只能得到两个可能的值::local和:UTC,默认值是:UTC

当我使用rails控制台查看我的条目时,呈现的时间是在转换为"东部时间"之后,为了查看存储在DB中的实际日期使用:

created_at_before_type_cast

返回UTC时间,因为它是默认的

和我认为在DB中存储在我的时区+2的原因是因为我使用MySQL工作台,它的GUI只是显示我的本地机器时间的datetime值。

概要:

真正重要的设置:

config.time_zone

效果很好。阅读文档很重要

检查application.rb中的配置。如果没有设置时区,rails将采用操作系统的默认时区。要解决这个问题,请将UTC设置为时区。

相关内容

  • 没有找到相关文章

最新更新