簡體   English   中英

Rails 3.2 + Ruby 1.9.3,created_at以錯誤的時區返回

[英]Rails 3.2 + Ruby 1.9.3, created_at returns with wrong timezone

我升級到Rails 3.2和Ruby 1.9.3,我得到了一個非常奇怪的行為

我有一個名為Entry的模型。 創建新條目時,它將以當前日期和時間插入到DB中。

但是當我運行Entry.find_by_id(THE_ENTRY_ID).created_at我得到了在datetime創建的“正確”但在另一個TimeZone中,例如:在db中:

2013-03-24 00:05:29

而在Rails控制台和應用程序中:

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

為什么突然回到錯誤的時區?

讀完DOCS並看到這個導演后,確定: http//railscasts.com/episodes/106-time-zones-revised

一切都清楚了。

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

此設置是將所有時間對象轉換為當前時區的實際設置。 這就是我把它看作-4的方式

此設置:

config.active_record.default_timezone

是決定如何在DB中節省時間的那個,但是...它只獲得2個可能的值:: local和:UTC,默認值為:UTC

當我使用rails控制台查看我的條目時,顯示的時間是在轉換為“東部時間”之后,為了查看存儲在數據庫中的實際日期使用:

created_at_before_type_cast

返回UTC時間,因為它是默認值

我認為在DB中存儲在我的時區+2中的原因是因為我使用了MySQL Workbench,它的GUI只顯示了我當地機器時間的日期時間值。

摘要:

實際上重要的設置:

config.time_zone

它工作得很好。 通過DOCS非常重要

檢查application.rb的配置。 如果未設置時區,則rails將采用操作系統的默認時區。 要解決此問題,請將UTC設置為時區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM