2010-07-14 15 views
6

Ho un database che è stato scritto da un'applicazione non-rail e letto da un'applicazione rails. C'è un campo datetime nel database e i dati memorizzati in questo campo sono memorizzati in Eastern Time. Nella mia app per rails, capisco che posso impostare il fuso orario dell'applicazione nel mio file environment.rb facendo config.time_zone = 'Eastern Time (US & Canada)'. Tuttavia, le rotaie presuppongono che i dati memorizzati nel database siano archiviati in UTC e convertiti da config.time_zone a UTC mentre estrae le informazioni all'interno e all'esterno del database.Campo temporale database Rails/Activerecord

C'è un modo per dire ai binari i dati in questo particolare campo, o anche tutti i miei campi datetime, è Eastern Time e non UTC?

risposta

0

il mio primo suggerimento è quello di correggere l'altra applicazione. L'altra applicazione dovrebbe memorizzare uno scostamento UTC con la data. Se provi a risolvere un problema, creerai di più. Ad esempio, cosa succede quando passa l'ora legale, quindi gli offset vanno a cambiare?

Detto e non avendo altra scelta - vorrei fare qualcosa in questo senso, per un campo created_at:

def created_at_in_eastern 
    DateTime.parse(self.created_at.strftime("%D %T EST")) if self.created_at 
end 

oppure è possibile utilizzare EDT a seconda di come i dati vengono salvati, basta leggere il disclaimer in cima - questo è un trucco!

1

config.active_record.default_timezone - Dice ActiveRecord di interpretare i tempi di database come essere nel fuso orario specificato, e di utilizzare questo fuso orario per lavorare con il created_at & updated_at attributi.

8

On Rails 3.0.5 in application.rb, questo funziona:

config.time_zone = 'Central Time (US & Canada)' 
config.active_record.default_timezone = :local 
Problemi correlati