2010-07-14 15 views
6

Tengo una base de datos que se escribe en una aplicación que no es de rieles y se lee desde una aplicación de rieles. Hay un campo de fecha y hora en la base de datos y los datos almacenados en este campo se almacenan en hora del este. En mi aplicación de rieles, entiendo que puedo configurar la zona horaria de la aplicación en mi archivo environment.rb haciendo config.time_zone = 'Eastern Time (US & Canada)'. Sin embargo, los rieles asumen que los datos almacenados en la base de datos se almacenan en UTC y se convierten de config.time_zone a UTC, ya que extrae información de la base de datos y la extrae.Rails/Activerecord database field timezone

¿Hay alguna manera de decir a los rieles que los datos en este campo en particular, o incluso en todos mis campos de fecha y hora, son hora del este y no UTC?

Respuesta

0

mi primera sugerencia es arreglar la otra aplicación. La otra aplicación debe almacenar un desplazamiento UTC con la fecha. Si intenta resolver un problema, simplemente creará más. Por ejemplo, ¿qué ocurre cuando se usa el horario de verano, entonces las compensaciones van a cambiar?

Dicho esto y que no tiene otra opción - me gustaría hacer algo en este sentido, para un campo created_at:

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

o puede utilizar EDT dependiendo de cómo se guardan los datos, basta con leer el descargo de responsabilidad en la parte superior, ¡esto es un truco!

1

config.active_record.default_timezone - Indica ActiveRecord para interpretar los tiempos de bases de datos como en la zona de tiempo especificado, y para usar esta zona horaria para trabajar con el created_at & updated_at atributos.

8

En Los Carriles 3.0.5 en application.rb, esto funciona:

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