2016-04-18 1 views
1

Ich habe Spalte, die nur Zeit speichert. Ich möchte es in Datetime und dann in eine bestimmte Zeitzone konvertieren. Wenn ich es auf der Konsole nur mit dem Attribut ausführe, wird der korrekte Konvertierungswert angezeigt. Aber wenn ich es in Abfrage verwende, zeigt die Abfrage die aktuelle Zeit in UTC an. Angenommen, ich habe Zeit "05:15" in der Zentralzeit gespeichert. Nun, wenn ich Datensätze für einen Intervall von 30 Minuten holen will plus und minus dieser Zeit, ich folgenden,Ruby on Rails 3 konvertieren Zeit zu DateTime in bestimmten Zeitzone

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)") 

Wenn ich über Code auf der Konsole ausführen und den Wert sehen, zeigt es richtig umgerechneten Wert. Aber wenn ich diese Variable in der unteren Abfrage verwende, wird die aktuelle Zeit anstelle der Abfahrtszeit verwendet.

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

Die Zeit in obiger Abfrage verwendet wird, soll die Zeit, die ich d.h Zentrale Zeitzone will, aber in der Abfrageausgabe zeigt es UTC verwendet.

Bitte lassen Sie mich wissen, was ich vermisse.

Antwort

1

Es sollte egal sein, welche Zeitzone die Abfrage in der where-Klausel verwendet, solange es sich um die gleiche Zeitdarstellung handelt. Die Zeit, die Sie in Ihrer Abfrage-Ausgabe von Rails sehen, ist höchstwahrscheinlich das UTC-Äquivalent des Rubins DateTime, das an die where-Anweisung übergeben wird. Wenn also in Ihrem Ruby-Code 12:00 Uhr (UTC-6) ist, dann ist die in der SQL-Abfrage angezeigte Zeit 18:00 Uhr, was der Mittag-CST entspricht.

+0

Wollen Sie sagen, dass, was auch immer Datetime ich biete, die Datetime in der Abfrage wird wie UTC, d. Wenn ich eine DateTime in CST, während der Ausführung, wird es in UTC konvertiert werden. –

+0

Ja, das ist richtig, es ist in UTC konvertiert. –