Mis created_at
marcas de tiempo se almacenan en UTC:
>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00
¿Cómo convierto uno de ellos a 'Hora del Este (EE. UU. Y Canadá)' (teniendo en cuenta el horario de verano)? Algo como:
Annotation.last.created_at.in_eastern_time
ruby-on-rails
ruby
datetime
Tom Lehman
fuente
fuente
now.in_time_zone(3)
created_at.in_time_zone("EST")
es más cortoAunque esta es una pregunta antigua, vale la pena mencionar algo. En una respuesta anterior, se sugiere usar un before_filter para establecer la zona horaria temporalmente.
Nunca, nunca debe hacer eso porque Time.zone almacena la información en el hilo, y probablemente se filtrará a la siguiente solicitud manejada por ese hilo.
En su lugar, debe usar un filtro around_filter para asegurarse de que Time.zone se restablezca después de que se complete la solicitud. Algo como:
Leer más sobre esto aquí
fuente
Si agrega esto a su
/config/application.rb
Entonces puedes celular
para obtener la hora en la zona horaria especificada.
fuente
Si configura su
/config/application.rb
fuente
Establezca su zona horaria en Hora del Este.
Puede establecer su zona horaria predeterminada en config / environment.rb
Ahora todos los registros que extraiga estarán en esa zona horaria. Si necesita diferentes zonas horarias, digamos que según la zona horaria de un usuario, puede cambiarla con un before_filter en su controlador.
Solo asegúrese de almacenar todos sus tiempos en la base de datos como UTC y todo será perfecto.
fuente
Time.zone=
es github.com/rails/rails/blob/master/activesupport/lib/… seguro para subprocesos .