2012-05-03 4 views
0

クライアントは実際には特定の日に3つの異なるタイムスロットでイベントをスケジュールするため、イベントコントローラではクイック追加アクションがあります。日時はデフォルトのフォームでうまくいきますが、手で値を設定しようとすると問題が発生します。Rails Timeオブジェクト

def quick_add #params are date like 2012-04-29, timeslot is a string 

timeslot = params[:timeslot].to_sym 
date = params[:date].to_date 

@workout = Workout.new do |w| 
    w.name = 'Workout!' 
    w.date = date 
    case timeslot 
    when :morning 
    w.time = Time.local(w.date.year, w.date.month, w.date.day, 6) 
    when :noon 
    w.time = Time.local(w.date.year, w.date.month, w.date.day, 12) 
    when :evening 
    w.time = Time.local(w.date.year, w.date.month, w.date.day, 18, 15) 
    else 
    w.time = Time.now 
    end 
end 

イベントが作成取得され、日付が正しいですが、時間は以下のとおりです。

Morning: 2000-01-01 10:00:00 UTC 
    Expected: 2012-05-02 06:00:00 UTC -400 
Noon: 2000-01-01 16:00:00 UTC 
    Expected: 2012-05-02 12:00:00 UTC -400 
Evening: 2000-01-01 22:15:00 UTC 
    Expected: 2012-05-02 18:15:00 UTC -400 

それはレールコンソールでコマンドを実行すると、私が期待する結果を得るように見えることは注目に値します。

+0

あなたの文章に間違いがありますか?「イベントは作成されていますが、日付は正しいですが時刻は:」ですか?日付が間違っています。時刻は正しいです。 –

+0

おそらく 'params [:date] .to_data'はあなたに期待した結果を与えていませんか? 'params [:date]'が正しいことを確認するために、要求パラメータをチェックしてください。 –

+0

私は正しく動作している別のフィールドに日付を格納しています。時間の対象は何かに問題がある – DVG

答えて

0

時間値は、タイムゾーンデータを格納する必要がないように、UTC/GMT(+0)タイムゾーンに整数として格納されます。 Railsは常にUTC時刻としてデータベースに時刻を格納します。あなたがそれらを読んだら、あなたはあなたの地方のタイムゾーンに再び変換したいと思うでしょう。

time.getlocalを使用して、ローカルタイムゾーンに変換することができます。