0

クライアントは、特定の日に 3 つの異なる時間枠でイベントをスケジュールするだけなので、イベント コントローラーにクイック追加アクションがあります。日付と時刻はデフォルトのフォームで問題なく機能していますが、値を手動で設定しようとすると問題が発生します。

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

Rails コンソールでコマンドを実行すると、期待どおりの結果が得られるようです。

4

1 に答える 1

0

時間の値は UTC/GMT (+0) タイム ゾーンで整数として保存されるため、タイム ゾーン データを一緒に保存する必要はありません。Rails は常に時刻を UTC 時刻としてデータベースに保存します。それらを読み上げたら、それらをローカル タイム ゾーンに再度変換する必要があります。

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

于 2012-05-03T03:22:34.373 に答える