Estoy un poco confundido acerca de las zonas horarias en los rieles. Quiero que mi aplicación Rails use el horario de verano británico (como horario de verano en los EE. UU.) Para las marcas de tiempo establecidas en updated_at y created_at en mis modelos. He cambiado de environment.rb decirLas marcas de tiempo de los rieles no usan la zona horaria correcta
config.time_zone = 'London'
El servidor ubuntu mi aplicación está en parece utilizar BST por su tiempo: en la línea de comandos, por ejemplo, si el tipo i 'fecha' i obtener la hora actual (no compensado por una hora). En la consola de rieles, veo lo siguiente:
>> time = Time.now
=> Wed Oct 27 16:29:17 +0100 2010
>> time.zone
=> "BST"
Todo bien. Sin embargo, si hago un nuevo objeto de modelo de AR y lo guardo, las marcas de tiempo son de hace una hora. Entonces, parece que esto está usando UTC. Ahora, puedo ver la lógica en esto: dado que las marcas de tiempo pueden usarse en la lógica del modelo, quiere que se basen en un tiempo de criterio invariable, es decir UTC. Sin embargo, esto es un poco raro de comportamiento que no entiendo:
#change a record and save it
>> someobj.save
=> true
#object's updated_at is one hour ago
>> someobj.updated_at
=> Wed, 27 Oct 2010 15:34:22 UTC +00:00
>> Time.now
=> Wed Oct 27 16:34:31 +0100 2010
#however, Time.now - object's updated at is just a few seconds.
>> Time.now - someobj.updated_at
=> 15.305549
Por lo tanto, antes de hacer la resta, updated_at se convierte en la zona horaria actual.
El motivo por el que quiero mostrar la fecha en el huso horario actual es solo para informes de estado, etc. en las vistas: si alguien actualiza algo, quiero que lo vean actualizado '1 minuto atrás' no 'hace una hora '.
¿Alguien puede desconfundirme? vivas, max
EDITAR: Mi problema inmediato, de mostrar el momento correcto en el estado, se resuelve utilizando el helper 'time_ago_in_words', que se ajusta para la zona horaria. Sin embargo, me gustaría que alguien me explique qué ocurre con las marcas de tiempo :)
ah - eso es genial. ¡Gracias! Estoy de acuerdo en que mantenerlos a todos en UTC tiene sentido. –
bien, lo tengo. pero si quiero mostrar la hora local en la fecha y hora, seleccione en mi vista ¿qué puedo hacer? – Diego
Probablemente la mejor manera es usar un método de JavaScript para mapear los tiempos del sistema a las horas locales del navegador. Esa es otra pregunta sin embargo. – tadman