2013-01-20 32 views
0

我在那裏保存datetime屬性時,形式返回-04的問題:00,而不是-05:00Rails的本地時間返回錯誤的時區

使用Rails 3.2.3

在application.rb中:

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

使用MySQL與mysql2適配器

運行@wine.released_at.localtime回報2008-05-15 00:00:00.000000000 -04:00
跑步@wine.released_at回報2008-05-15 04:00:00.000000000 Z
運行Time.now.zone返回Eastern Standard Time
運行@wine.released_at.zone回報EDT

我相當困惑。我雖然設置config.time_zone應該使Rails自動將所有數據庫日期時間值轉換爲設置的time_zone ...爲什麼不會發生這種情況?

+0

夏令時? – iamnotmaynard

+0

我確實已經在兩個系統上啓用了......你是說在下一個DST開關上,我應該開始看到-05:00? – JakeTheSnake

回答

0

它在我看來好像zone屬性返回適用於指定時間的「區間間隔」的名稱。因此,在夏季,它將返回「EDT」,但在冬季,它將返回「復活節標準時間」。 (奇怪的是,它使用一個縮寫但不是另一個,但嘿...)

因此它使用相同的時區兩個 - 這些只是在同一時區內的不同方面:有時這是標準時間,有時是夏令時。

如果您打印Time.now.localtime它應該會顯示-05:00以顯示UTC在東部時間的當前偏移量爲-5小時(即東部時間目前是UTC的5小時)。

+0

那麼有沒有辦法讓我的表單總是顯示EST而不是EDT?或者也許包括「EST」/「EDT」? – JakeTheSnake

+0

@JakeTheSnake:你絕對不希望總是顯示EST版本。你總是可以顯示'time.zone'和'time'。我個人*不會*在整個系統中使用固定時區,而是允許用戶選擇當地時區,但這是一個不同的設計決策。 –

+0

那麼我得到的是「-04:00」的外觀令人不安。是的,顯示的時間應該準確到用戶的時區,但如果他們看到「-04:00」,他們可能會認爲他們保存的時間沒有正確保存。即我保存了「2013年1月1日」的日期,但我在表單上看到「2012年12月31日」。人們只是不擅長識別和轉換時區。 – JakeTheSnake

0

您是否嘗試過使用in_time_zone?

+0

是的,但它們都返回相同的「Z」值(請參閱初始文章) – JakeTheSnake