2010-12-06 113 views
1

我在將退出時間字符串轉換爲新的Time對象時遇到了這個問題。Ruby on Rails中的time屬性問題

當我在控制檯

t = Time.parse("8am") 
2010-12-06 08:00:00 +0530 

鍵入此它還給08:00作爲結果如上述所示。

但是,當我使用存儲

business.start_time = t 
business.save(:validate => false) 

它存儲在MySQL數據庫02:30此值。

只有當我通過控制檯存儲時纔會發生這種情況。當相同的數據來自表單時,它在MySQL表中正確地存儲爲08:00。這裏有什麼問題嗎?時區設置與默認的utc不同。請幫忙。我該怎麼辦。

我必須解析表中的所有記錄,並取一個字符串屬性,並將其轉換爲其等效的Time類值並將其存儲在同一個表中的另一個屬性中。我正在爲它寫一個耙子任務。但是,當存儲時,我得到02:30而不是08:00(例如)。

+1

所以當你在你的應用中使用「8am」時,你希望它意味着上午8點(UTC)而不是上午8點(IST)? – Gareth 2010-12-06 16:20:15

+0

business.start_time.utc和t.utc的輸出是什麼? – Bohdan 2010-12-06 16:25:27

回答

2

對日期和MySQL非常小心。日期時間字段被存儲,就好像它們是數據庫中的字符串 - 所以無論Rails發送什麼(檢查你的日誌中的SQL)將被存儲。我假設你在environment.rb中設置爲UTC,所以你的Time對象以UTC形式輸出爲一個字符串。

對於處理不同區域的時間和區域間轉換,MySQL很差(在我看來)。

我建議你不要急於通過日期處理。始終處理應用程序中的日期和UTC中的數據庫,並在解析時(通過指定時區)或在視圖中對其格式化來執行到特定時區的任何轉換。

0

時間似乎存儲在UTC。嘗試在啓動控制檯會話時正確設置時區。