[英]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.