1

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

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

但是当我运行时,Entry.find_by_id(THE_ENTRY_ID).created_at我得到了在日期时间创建的“正确”,但在不同的时区中,例如:在数据库中:

2013-03-24 00:05:29

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

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

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

4

2 回答 2

3

阅读 DOCS 并看到此 rails casts 后确定: 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 很重要

于 2013-03-24T09:11:21.000 回答
1

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

于 2013-03-24T00:43:07.627 回答