2016-07-07 7 views
0

Ich habe Probleme mit Zonen in Schienen.Schienen in Zeitzone finden - funktioniert nicht

Ich habe CarRoute id: 22783, route_time: "2016-07-07 05:30:00" aber in CarRoute.find_by_id(22783).route_time is Thu, 07 Jul 2016 07:30:00 CEST +02:00

So Schienen hinzufügen 2h, aber wenn ich von Zeit finden wollen, dass diese Route nicht funktioniert,

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 wissen, wie diese finden?

+0

Ok, so Schienen ist nicht "hinzufügen" 2hr - Ihre Daten werden in der Regel in der UTC in der Datenbank gespeichert, das ist, weil das ein guter Standard zu haben ist. Sie zeigen es wahrscheinlich dann in Ihrer lokalen Zeitzone an (wo Sie den 2-Stunden-Zeitunterschied erhalten). also ... um es zu finden, müssen Sie die Zeit in UTC verwenden –

+0

Aber DateTime.new (Date.today.year, Date.today.month, 5, 7, 0, 0, 0) wird in UTC Di zurückgegeben, 05 Jul 2016 07:00:00 UTC +00: 00 Ich versuche Time.zone.local (Date.today.year, Date.today.month, 5, 7, 0, 0) .in_time_zone ('UTC') aber es sieht für mich komisch aus;) – AdamM

Antwort

0

Rails speichert alles in UTC, was bedeutet, dass jede Zeitzone, die Sie beim Zuweisen einer Datetime verwenden, in UTC konvertiert wird. Wenn der aktive Datensatz einen neuen Datensatz lädt, wird dieses Datum in der aktuellen Zeitzone (Time.zone) angezeigt. Wenn Sie also CarRoute.find_by_id(22783).route_time ausführen, erhalten Sie ein CEST-Datum, aber wenn Sie zu Ihrer Datenbank gehen, sehen Sie ein UTC-Datum.

Folgendes sollte es für Sie klar machen:

> 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 

Wenn Sie DateTime.new das Datum ist in der utc erstellt:

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

In Ihrem wo Abfrage, sind Sie bei 7 UTC Start , das ist 09.00 Uhr MESZ. Versuchen Sie so etwas wie:

Verwandte Themen