2012-05-07 75 views
1

Rails以UTC時間存儲created_at和updated_at時間戳。配置Ruby on Rails created_at和updated_at日期time_zone

但我正在使用這些字段來過濾和存儲(並做很多其他的東西與記錄)基於這些領域,所以重要的是,當我調用created_at和updated_at屬性,我得到時間戳在我的時區。

正如以下兩個SO問題所述,我可以通過在environment.rb文件中配置時區來完成此任務。

但是,這現在正在爲我工​​作。

因爲我從數據庫中獲取記錄,根據created_at字段(使用UTC),所以自然出現錯誤的字段,然後我顯示它們,所以日期再次以UTC顯示,而不是我想要的是。

有什麼方法可以改變導軌存儲日期的時區?

OR

有沒有我怎麼能實現對數據庫取和顯示,而無需對Rails的通話object.created_at屬性的解決方法嗎?

Rails and timezone in created_at

Rails Time zone issue

+0

我不知道我的理解。要做到這一點的「正確方法」是將記錄存儲在UTC中,然後在需要的情況下將'Time.zone'設置爲其他內容。 – x1a4

回答

0

我不知道爲什麼我連問這個論壇上的問題,因爲解決方法似乎很簡單。但它沒有把我八個小時到達它:)

1)雖然從數據庫中獲取記錄並顯示他們,我可以簡單地做

select CONVERT_TZ(date) as date from table; 

而不是做

select date from table; 

CONVERT_TZ()是一個mysql特定的功能,所以它爲我工作。不是一個通用的解決方案。其次,當我不得不從其他任何時區的日期範圍提取記錄時,我可以做兩件事中的一件。

其中一個 - 我可以替換[user-entered-date] 00:00:00[user-entered-date] 07:00:00日期範圍的起點和[user-entered-date] 59:59:59[user-entered-date + 1.day] 07:00:00範圍的結束點。請注意,這將需要我使用DateTime對象而不是使用Date對象。

兩個 - 在where條款,我能做的

CONVERT_TZ(registrations.created_at) <= [user/entered/date] 

代替

(registrations.created_at) <= [user/entered/date]