2016-04-18 18 views
1

時間だけを格納する列があります。私はそれをdatetimeに変換してから、特定のタイムゾーンに変換したい。属性だけを使ってコンソール上で行うと、正しい変換値が表示されます。しかし、私はそれをクエリで使用すると、クエリは現在の時刻をUTCで表示します。中央時間に「05:15」という時間が格納されているとします。私は30分プラスと今回のマイナスの間隔のレコードを取得したいとき、私は、コンソール上で上記のコードを実行し、値を見ると今、私は、Ruby on Rails 3時刻を特定のタイムゾーンでDateTimeに変換する

day = Time.now 
# departure_time_from _db below is the name of column in table which store time 
departure = departure_time_from _db.change(:day => date.day, :month => date.month, :year => date.year) 
departure = departure.in_time_zone("Central Time (US & Canada)") 

を次の操作を行い、それが正しい変換された値を示しています。しかし、以下のクエリでこの変数を使用すると、出発時間の代わりに現在の時間が使用されます。

Model.where("column_name > ? and "column_name < ?, departure - 30.minutes, departure + 30.minutes) 

上記のクエリで使用される時間は、必要な時間、つまり中央タイムゾーンでなければなりませんが、クエリ出力では、使用されているUTCが表示されます。

私には何が足りないのか教えてください。

答えて

1

where句でクエリが使用するタイムゾーンは、同じ時刻表現であれば問題ありません。 Railsからのクエリ出力に表示されている時間は、ルビーDateTimeオブジェクトのUTCに相当する可能性が最も高いです。whereステートメントに渡されます。したがって、departureがあなたのRubyコードで12:00正午(UTC -6)である場合、SQLクエリに表示される時間は正午のCSTに対応する18:00になります。

+0

私が提供する日時は問わず、クエリの日時はUTCごとになります。すなわち、実行中にCSTでDateTimeを指定すると、UTCに変換されます。 –

+0

はい、正しいです、それはUTCに変換されます。 –

関連する問題