ruby-on-rails - Rails 3.2 + Ruby 1.9.3,created_at 返回时区错误

标签 ruby-on-rails ruby activerecord timezone

我升级到 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/

相关文章:

ruby - Sidekiq:停止运行工作线程

ruby-on-rails - Heroku 应用程序崩溃

php - Yii2查询结果总是返回相同的

ruby-on-rails - 在生产环境的服务器上部署sidekiq

ruby-on-rails - 在 Rails 4 中将 hstore 列与 simple_form 集成

ruby-on-rails - Rails 3 等效于periodic_call_remote

database - Rails 3、ActiveRecord、PostgreSQL - ".uniq"命令不起作用?

java - Android 上的 HTTP Post Multipart 不发布图像。

jquery - 使用 Rails 3 学习 Ajax 的资源

ruby-on-rails - 如何将哈希值插入数据库?