ruby on rails - timezones - Zona horaria con carriles 3
strftime rails (4)
Tengo un problema bastante común, pero por alguna razón he intentado todas las sugerencias en la web y ninguna parece funcionar.
Configuré la zona horaria en config como ''EST''
config.time_zone = ''Eastern Time (US & Canada)''
Pero cuando se muestra la hora en la pantalla, continúa mostrando la hora UTC que está almacenada en la base de datos. Probé el depurador y aquí está la salida
(rdb:1) Time.zone
#<ActiveSupport::TimeZone:0x1061f4760 @utc_offset=nil, @current_period=nil, @name="Eastern Time (US & Canada)", @tzinfo=#<TZInfo::TimezoneProxy: America/New_York>>
(rdb:1) Order.first.placed_at
Fri Jan 01 15:00:00 UTC 2010
Actualización: Aquí hay otro usuario que tiene la misma pregunta Rails timezone está equivocado cuando se muestra
Creo que lo que describes es este error: https://github.com/rails/rails/issues/6816
Prueba in_time_zone
. Por ejemplo
>> Time.now
=> Sun Dec 05 21:34:45 -0500 2010
>> Time.zone
=> #<ActiveSupport::TimeZone:0x1033d97b8 @name="Pacific Time (US & Canada)", @tzinfo=#<TZInfo::DataTimezone: America/Los_Angeles>, @utc_offset=-28800, @current_period=nil>
>> Time.now.in_time_zone
=> Sun, 05 Dec 2010 18:34:54 PST -08:00
En su caso, usted quiere Order.first.placed_at.in_time_zone
.
Si desea establecer un huso horario diferente para diferentes usuarios de su aplicación , asegúrese de utilizar un filtro around_filter en lugar de un filtro anterior para cambiar Time.zone. Algo relacionado con cómo Time.zone se filtra a otros hilos y, por lo tanto, otros usuarios pueden incluir un huso horario que no deberían. De esta publicación en el blog: http://ilikestuffblog.com/2011/02/03/how-to-set-a-time-zone-for-each-request-in-rails/
en application_controller.rb:
around_filter :set_time_zone
private
def set_time_zone
old_time_zone = Time.zone
Time.zone = current_user.time_zone if logged_in?
yield
ensure
Time.zone = old_time_zone
end
También me pareció útil utilizar el método time_zone_select form helper al permitir a los usuarios cambiar su zona horaria. Si llamaras a tu campo: time_zone, lo usarías como:
f.time_zone_select(:time_zone)
Y, por último, esto se ve bastante impresionante. Detecta automáticamente y establece la zona horaria a través de javascript . Aquí está la gema de rieles para agregar a la cartera de activos: https://github.com/scottwater/detect_timezone_rails y la publicación de blog que la acompaña: http://www.scottw.com/automated-timezone-detection
Verifique que ActiveRecord::Base.time_zone_aware_attributes
sea ​​verdadero.