2012-11-12 171 views
3

我有時區設置。時間和日期時間之間的Rails時區差異

c.start = Time.new(2012,12,25) 
=> 2012-12-25 00:00:00 -0700 #has correct offset 
c.end = Time.new(2012,12,25).end_of_day 
=> 2012-12-25 23:59:59 -0700 #same deal 

使用日期時間:

c.start = DateTime.new(2012,12,25) 
=> Tue, 25 Dec 2012 00:00:00 +0000 # no offset 
c.end = DateTime.new(2012,12,25).end_of_day 
=> Tue, 25 Dec 2012 23:59:59 +0000 # same 

我不小心使用了使用時間

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

創建從控制檯聖誕活動...

c = Event.new(:title => "Christmas") 

DateTime認爲輸入是假定的在config.time_zone中,但是當它被保存到數據庫時沒有轉換。它的存儲方式與返回值相同(格式化爲db)。

使用時間真的沒有什麼大不了的,但是我需要手動補償任何時候我使用DateTime,並希望它在正確的區域?

回答

7

是的。 Time.new將在沒有特定時區的情況下將參數解釋爲本地時間,並且DateTime.new將在沒有特定時區的情況下將參數解釋爲UTC。如文件所述。爲了使您的代碼更加清晰,您可能需要將Time.new替換爲Time.local

你可以做的是使用DateTimemixins for Time來調用Time.local(2012,12,25).to_datetime。但是如果年/月/日來自用戶/瀏覽器,那麼也許你應該得到用戶/瀏覽器的時區而不是使用你的服務器。

如果你需要創建一個遷移的數據庫修復現有的數據,new_date_time = Time.local(old_date_time.year, old_date_time.mon, old_date_time.mday, old_date_time.hour, old_date_time.min, old_date_time.sec).to_datetime

+1

感謝。你能指出我在哪裏有記錄嗎?我沒有看到它在API碼頭中提到。 – kjs3

+0

我添加了文檔的鏈接。對於'DateTime.new',偏移的默認值是'0'。 – vladr