2012-02-10 54 views
0

我有一個存儲時間值的Rails應用程序,並且我在config/application.rb中設置了一個時區。Rails時間類型和時區

這可以在日期時間列上正常工作,但時間列以UTC顯示時間,而不是指定的時區。

這兩個示例的時間都以20:50(UTC)存儲在數據庫中,但是當我在視圖中顯示它時,時間列顯示爲UTC,並且datetime列在所選時區中正確顯示。

time2:  2000-01-01 20:50:00 UTC 
datetime2: 2012-02-09 21:50:00 +0100 

這是預期的行爲嗎?不應該時間類型也使用配置的時區?

回答

2

ActiveRecord使用TimeWithZone,其中方法如localtime,utc,utc?可能會幫助你。

+0

所以如果一個屬性的類型時,它不會自動轉換爲在視圖中配置的時區,但是你必須寫東西像<%= U。 time2.localtime%>?但datetime的屬性會自動轉換,您只需鍵入<%= u.datetime2%>。爲什麼這兩種類型的區別? – Atle 2012-02-13 18:32:16

0

是的,這是預期的行爲。軌(ActiveRecord的)存儲在UTC時間,然後將它們覆羽到任何時區Time.zone在視圖渲染設置爲。

+0

是的,我知道,正如我在問題中所說的,我已經設置了一個時區,並且上面的兩個示例都以UTC(20:50)存儲在數據庫中,但在視圖中顯示時,只有datetime屬性被轉換爲時區。不ActiveRecord轉換時間屬性?只有日期時間屬性? – Atle 2012-02-13 18:36:24

+0

好了,日期應該不會(也不會)有它確實相關的時區。只有時間或日期時間。所以是的,這是有道理的。 – 2012-02-13 20:32:33

+0

我沒有提到關於日期的,只是時間和日期什麼。再一次,如在我的問題所述,我已經配置的時間段和我已經存儲爲UTC數據庫中的一個時間和一個日期時間,但是當我顯示它們在這樣的視圖:<%= u.time2%>和<%= u.datetime2%>只是將日期時間屬性轉換爲時區。 – Atle 2012-02-13 21:00:08

0

我放棄了這一點,Rails似乎完全忽略了具有時間屬性的config.time_zone,並將它用於datetime屬性,原因我不明白。而且看起來,沒有其他人也理解它。

我會將時間屬性更改爲字符串類型,並在需要將它作爲時間對象使用時將其解析爲時間對象。如果這是固定在後面的Rails釋放我隨時可以改回使用時間屬性,但現在我需要去,這已經拖我的天。

但由於試圖幫助:)