2013-03-24 65 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很重要

相關問題