我有所需的所有時區信息,並根據this railscast正確保存所有信息。一切正常的目的,如在表中顯示時間的一切工作,但我想知道如何將以下內容轉換爲current_users
保存的時區。軌道上的紅寶石轉換爲用戶時區
我有一個發現呼叫總數每小時:
Calls.count(:group => DATE_PART('hour', start_time),
:conditions => ["start_time BETWEEN ? AND ?", start, finish]
該查詢,所有的一切在開始和結束時間之間的時間所做的電話拉。唯一的問題是它將數據庫中的時間縮短爲UTC。我用Time.now.utc_offset
寫了我自己的小轉換方法,但意識到這是行不通的。用什麼方法比較保存的用戶time_zone
與數據庫中的內容,並添加utc_offset
。
的time_zone
存儲在數據庫中的東部時間(美國&加拿大)的字符串。
解決這個問題的最佳方法是什麼?我可以更改以將用戶的偏移量保存在數據庫中,但在我去之前,我寧願查看是否有更簡單的方法。
編輯
更清晰,查詢返回的時間和次數的哈希值。因此,例如:
Hour Count
"5" 20
"6" 15
"7" 35
... ...
的時候要追溯到UTC偏移小時,我需要的是數字轉換爲用戶的時區,因此,例如,如果是東部時間(美國和加拿大)通過你循環散列並在小時內加-4。
編輯2
感謝Andy,我能夠很簡單地算出這個。您想要做的第一件事是將Time對象設置爲當前用戶時區。所以:
Time.zone = @current_user.time_zone
=> "Eastern Time (US & Canada)
然後添加當前用戶的偏移到「小時」散列
hour + Time.now.in_time_zone.utc_offset/3600
漂亮的自我解釋裏面,而是讓你先前設置的區域的時間,並找到UTC這就是爲什麼我們除以3600的原因。
你能澄清一下這個問題嗎?你只是想指定用戶時區的開始/結束時間,還是隻是想在查詢完成後將UTC時間轉換爲用戶的時區? – klochner 2009-08-20 21:38:35
查詢後將UTC時間轉換爲用戶所在的時區 – Ryan 2009-08-21 01:11:31