私は必要なすべてのタイムゾーン情報を持っており、すべての情報をthis railscastに従って正しく保存しています。すべては、時間を表形式で表示するなど、すべての通常の目的に適していますが、私は次のものを保存した時間帯のcurrent_users
にどのように変換できるのでしょうか?ruby on rail to users to timezone
私は、時間ごとのコールの合計数を見つけています
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
は、データベースに文字列として東部時間(US &カナダ)の文字列として格納されます。
これを理解する最良の方法は、ユーザーのオフセットをデータベースに保存するように変更することができますが、その前に簡単な方法があるかどうかを確認します。
編集
より明確にするために、クエリは時間と回数のハッシュを返します。だから、例えば:UTCは時間をオフセットとして
Hour Count
"5" 20
"6" 15
"7" 35
... ...
は時間が戻って来て、私は、ユーザーのタイムゾーンにその数字を変換する必要があるので、例えば、それは東部標準時(米国およびカナダ)を通じて、あなたのループだ場合ハッシュを追加し、時間に-4を加えます。
編集2
私はこれをかなり簡単に把握することができました。まず、Timeオブジェクトを現在のユーザーのタイムゾーンに設定します。だから、:
Time.zone = @current_user.time_zone
=> "Eastern Time (US & Canada)
はその後、ハッシュ
hour + Time.now.in_time_zone.utc_offset/3600
かなり自明の内側に、現在のユーザーの「時」にオフセットを追加しますが、それはあなたが以前に設定され、ゾーンの時刻を取得し、UTCを発見しますオフセットを秒単位で設定しているため、3600で割ります。
少し質問をクリアすることはできますか?ユーザーのタイムゾーンに関する開始時刻と終了時刻を指定するだけですか、またはクエリの作成後にUTC時刻をユーザーのタイムゾーンに変換したいだけですか? – klochner
クエリが作成された後、ユーザーのタイムゾーンにUTC時刻を変換します。 – Ryan