2016-07-07 9 views
0

レールのゾーンに問題があります。レールがタイムゾーンに見つかりました - 動作していません

私はCarRoute id: 22783, route_time: "2016-07-07 05:30:00" を持っていますが、CarRoute.find_by_id(22783).route_time is Thu, 07 Jul 2016 07:30:00 CEST +02:00

にそう

CarRoute.where(:id=>22783,:route_time=> DateTime.new(Date.today.year, Date.today.month, Date.today.day, 7, 0, 0, 0)..DateTime.new(Date.today.year, Date.today.month, Date.today.day, 19, 0, 0, 0)) 
=> [] 

Enyoneこの見つける方法を知って、レールは2時間の追加が、私はこのルートは作品ではない時間で見つけたいとき?

+0

[OK]を、レールが2時間を「追加」しないように - あなたのデータは通常、UTCでDBに格納されていることを持っていることは良い標準だから、これはあります。おそらくあなたのローカルタイムゾーンに表示されているはずです(2時間の時間差が得られます)。だから...それを見つけるには、あなたはUTCで時間を使用する必要があります –

+0

DateTime.new(Date.today.year、Date.today.month、5、7、0、0)はUTC Tueで返されます。 2015年7月5日07:00:00 UTC +00:00 私はTime.zone.local(Date.today.year、Date.today.month、5、7、0、0).in_time_zone( 'UTC')を試していますが、その奇妙な私のために見える;) – AdamM

答えて

0

RailsはすべてをUTCに格納します。つまり、datetimeを割り当てるときに使用する任意のタイムゾーンをUTCに変換します。アクティブなレコードが新しいレコードを読み込むと、その日付が現在のタイムゾーン(Time.zone)に表示されるため、CarRoute.find_by_id(22783).route_timeを実行するとCESTの日付が取得されますが、データベースに行くとUTCの日付が表示されます。

次はあなたのためにそれを明確にする必要があります

> Time.zone 
    => #<ActiveSupport::TimeZone:0x007ff6bd390100 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>> 
> a = Account.first 
    => #<Account id: 6 ..... 
> a.updated_at 
    => Wed, 06 Jul 2016 18:47:32 UTC +00:00 
> Time.zone = "EST" 
    => "EST" 
> a.reload 
    ... 
> a.updated_at 
    => Wed, 06 Jul 2016 13:47:32 EST -05:00 

日付がUTCで作成されたDateTime.newを使用する場合:あなたの場所をクエリで

> d = DateTime.new(2016,7,7) 
    => Thu, 07 Jul 2016 00:00:00 +0000 
> d.utc? 
    => true 
> a.updated_at.utc? 
    => false 

、あなたは7 UTCで始めていますこれはCESTの午前9時です。以下のような何か試してみてください:

DateTime.new(2016,7,7,7,0,0,0).change(offset: 'CEST') 
関連する問題