zonas zona operaciones horarias horaria fechas ejemplos con cambiar ruby-on-rails datetime ruby-on-rails-3.1 timezone

ruby-on-rails - zona - operaciones con fechas ruby



¿Cómo crear un nuevo objeto DateTime en una zona horaria específica(preferiblemente la zona horaria predeterminada de mi aplicación, no UTC)? (4)

He configurado el huso horario en /config/application.rb , y espero que todos los tiempos generados en mi aplicación estén en esta zona horaria de forma predeterminada, pero cuando creo un nuevo objeto DateTime (usando .new ), lo crea en GMT . ¿Cómo puedo conseguir que esté en la zona horaria de mi aplicación?

/config/application.rb

config.time_zone = ''Pacific Time (US & Canada)''

irb

irb> DateTime.now => Wed, 11 Jul 2012 19:04:56 -0700 irb> mydate = DateTime.new(2012, 07, 11, 20, 10, 0) => Wed, 11 Jul 2012 20:10:00 +0000 # GMT, but I want PDT

El uso de in_time_zone no funciona porque solo convierte la hora GMT en PDT, que es la hora incorrecta:

irb> mydate.in_time_zone(''Pacific Time (US & Canada)'') => Wed, 11 Jul 2012 13:10:00 PDT -07:00 # wrong time (I want 20:10)


Hago lo siguiente en ApplicationController para configurar la zona horaria a la hora del usuario.

No estoy seguro de si esto es lo que quieres.

class ApplicationController < ActionController::Base before_filter :set_timezone def set_timezone # current_user.time_zone #=> ''London'' Time.zone = current_user.time_zone if current_user && current_user.time_zone end end


Otra forma sin análisis de cadenas:

irb> Time.zone.local(2012, 7, 11, 21) => Wed, 07 Nov 2012 21:00:00 PDT -07:00


Puede usar el objeto TimeWithZone ( Time.zone ) de Time.zone para crear y analizar fechas en la zona horaria de su aplicación:

1.9.3p0 :001 > Time.zone.now => Wed, 11 Jul 2012 19:47:03 PDT -07:00 1.9.3p0 :002 > Time.zone.parse(''2012-07-11 21:00'') => Wed, 11 Jul 2012 21:00:00 PDT -07:00


Si lo tengo, normalmente solo especifico el utc_offset al crear una instancia de Time.new o DateTime.new.

[1] pry(main)> Time.new(2013,01,06, 11, 25, 00) #no specified utc_offset defaults to system time => 2013-01-06 11:25:00 -0500 [2] pry(main)> Time.new(2013,01,06, 11, 25, 00, "+00:00") #UTC => 2013-01-06 11:25:00 +0000 [3] pry(main)> Time.new(2013,01,06, 11, 25, 00, "-08:00") #PST => 2013-01-06 11:25:00 -0800