2012-01-05 3 views
5

私は私に何をしているのかは簡単な問題だと思っていますが、間違っていることを理解できません。私のアプリでは、単純なform_forを通してコースを追加することができます。 created_atとは右に返されるようtime_selectフォームヘルパーは、設定されたタイムゾーンではなく、UTCとして新しい時間オブジェクトを解釈します

<div class="field"> 
    Start Time<br /> 
    <%= time_select :course, :start_time, { :minute_step => 5, :ampm => true } %> 
</div> 

<div class="field"> 
    End Time<br /> 
    <%= time_select :course, :end_time, { :minute_step => 5, :ampm => true } %> 
</div> 

私は東部標準時に設定するapplication.rbの私のタイムゾーンを設定し、これが正常に動作しているようです。そうのような彼らは、当然の講義のためのstart_timeとend_timeのを入力することができますタイムゾーン。

しかし、私が直面している問題は、start_timeとend_timeがUTCとしてデータベースに入力されていることです。したがって、ユーザーが午前10時に開始するクラスを選択すると、10 UTCではなく10 AM EST/15 UTCと入力されます。私はここで何が欠けていますか?私は何が起こりたいかが可能であるように思えます。

+0

これはおそらくあなたを助けます:http://stackoverflow.com/questions/4362663/timezone-with-rails-3 –

+0

私は実際には反対の問題があると思います。 start_timeとend_timeはタイムゾーン内に保存されていませんが、UTC時間として保存されます。 –

+2

タイムゾーンを扱うときにtime_selectを使用したことはありませんが、datetime_selectを使用したことはありませんが、これは問題になる可能性があります。 –

答えて

2

「未回答」フィルタからこの質問を削除するために、コメントからの回答を要約:

Tim Brandesによって推奨

多分これはあなたを助けます:Timezone with rails 3 ...私が使用したことがありませんタイムゾーンを扱うときはtime_selectだがdatetime_selectは常に問題になるかもしれないが、むしろそうではないようだ。 Philip Vのために働い

ソリューション:

私のstart_timeとend_timeのは、時間帯に保存されますが、UTC時間として保存されていません。 ... start_timeとend_timeの列の型をdatetimeに変更しました。これにより、問題が解決しました。私は時刻の列はUTCのみを許可すると思います。

0

私は同じ問題を抱えていました。しかし、その後、私はTimeオブジェクトのタイムゾーン情報が必要ないことを認識しました。

あなたが言ったように、UTCとしてデータベースに格納して、私たちは、このデータで行う必要があり、本当に重要なことは、次のとおりです。

course.start_time.hour 
course.start_time.min 

これは、タイムゾーンは無関係です。 (真夜中から8時間は、真夜中であっても比較しています.30分は0分から30分です。使用している時間帯に関係なく)。

リカレントイベントが開始または終了したとき、タイマーの値またはレースのラップタイムを格納するときを知るのと同様に、タイムストレージ構造が必要なほとんどのアプリケーションではデータベースが問題なく返すUTC時間を使用することができます。

関連する問題