2013-03-24 25 views
1

返回我升级到Rails 3.2和Ruby 1.9.3,我得到一个非常奇怪的现象的Rails 3.2 +红宝石1.9.3,created_at与错时区

我有一个叫项模型。当创建一个新的条目时,它将被插入到具有当前日期和时间的数据库中。

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

2013年3月24日0点05分29秒

而在Rails的控制台应用程序:

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

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

回答

1

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

+0

在我的application.rb我有:config.time_zone ='东部时间(美国和加拿大)' 我补充说:config.active_record.default_timezone ='东部时间(美国和加拿大) '但我仍然有同样的问题......它似乎是当它保存我的时区(+2),当我获取它的-4 – 2013-03-24 00:55:53

+0

你试过[本地化助手](http://guides.rubyonrails.org/i18n.html#adding-date-时间格式)在你的意见?不知道它是否在rails控制台中可用,但是它的别名是I18​​n#l,或者在您的视图中只有l。这就是说,我不知道为什么它会被取到。 – 2013-03-24 03:12:55

3

OK阅读DOCS,看到这个后轨道石膏: http://railscasts.com/episodes/106-time-zones-revised

一切现在已经很清楚。

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

此设置是负责将所有时间对象转换为当前时区的实际设置。这是这样,我认为这是-4

此设置:

config.active_record.default_timezone 

是如何保存在数据库中的时间决定的,但......它只是变得2个可能值:本地和:UTC和默认值是:UTC

当我使用导轨控制台查看我输入的时间后,转换为'东部时间',以查看实际存储在数据库中的日期:

created_at_before_type_cast 

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

,我认为在DB其存储在我的时区的原因+2 是因为我使用的MySQL Workbench和其GUI只是向我展示了日期时间值在我本地机器时间。

摘要:

,实际上重要的设置:

config.time_zone 

它工作得很好。 通过DOCS很重要

相关问题