2010-07-14 30 views
6

我有一個數據庫由非rails應用程序寫入,並由rails應用程序讀取。數據庫中有一個日期時間字段,存儲在該字段中的數據存儲在東部時間。在我的Rails應用程序中,我知道我可以通過執行config.time_zone = 'Eastern Time (US & Canada)'來設置應用程序的時區在我的environment.rb文件中。但是,rails假定存儲在數據庫中的數據以UTC格式存儲,並在將信息從數據庫中導入和導出時從config.time_zone轉換爲UTC。Rails/Activerecord數據庫字段時區

有沒有辦法告訴rails在這個特定的領域,甚至所有我的日期時間字段的數據是東部時間,而不是UTC?

回答

0

我的第一個建議是修復其他應用程序。另一個應用程序應該在日期中存儲UTC偏移量。如果你嘗試解決一個問題,你只是要創造更多。例如,當夏令時發生時會發生什麼,然後偏移量是否會發生變化?

話雖這麼說,並沒有其他的選擇 - 我會做的東西沿着這些路線,對於一個場created_at

def created_at_in_eastern 
    DateTime.parse(self.created_at.strftime("%D %T EST")) if self.created_at 
end 

,或者您可以使用EDT取決於如何將數據保存,只是閱讀免責聲明在頂部 - 這是一個黑客!

1

config.active_record.default_timezone - 告訴ActiveRecord的解釋數據庫倍,在指定的時區進行,並使用該時區用於與created_at &的updated_at屬性工作。

8

論application.rb中的Rails 3.0.5,這個工程:

config.time_zone = 'Central Time (US & Canada)' 
config.active_record.default_timezone = :local