/ / Ruby on Rails 3 converte il tempo in DateTime in un fuso orario specifico - ruby, ruby-on-rails-3

Ruby on Rails 3 converte time to DateTime in un fuso orario specifico - ruby, ruby-on-rails-3

Ho una colonna che memorizza solo il tempo. Voglio convertirlo in datetime e quindi in un fuso orario specifico. Quando lo faccio su console utilizzando solo l'attributo, mostra il valore di conversione corretto. Ma quando lo uso nella query, la query mostra l'ora corrente in UTC. Supponiamo che il tempo "05:15" sia memorizzato nell'ora centrale. Ora, quando voglio recuperare i record per un intervallo di 30 minuti più e meno di questo tempo, faccio quanto segue,

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

Quando eseguo il codice sopra sulla console e vedo il valore, mostra il valore convertito corretto. Ma quando uso questa variabile nella seguente query, viene utilizzata l'ora corrente anziché l'ora di partenza.

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

Il tempo utilizzato nella query sopra dovrebbe essere il tempo che voglio, ovvero il fuso orario centrale, ma nell'output della query, mostra UTC in uso.

Per favore fatemi sapere cosa mi sto perdendo.

risposte:

1 per risposta № 1

Non dovrebbe importare quale fuso orario utilizza la query in where clausola purché sia ​​la stessa rappresentazione temporale. Il tempo che vedi nell'output della query da Rails è molto probabilmente l'equivalente UTC del ruby DateTime l'oggetto viene passato al file where dichiarazione. Quindi se departure è 12:00 12:00 (UTC -6) nel tuo codice Ruby, quindi l'ora mostrata nella query SQL sarà 18:00, che corrisponde a mezzogiorno CST.