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 por defecto, 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?Cómo crear un nuevo objeto DateTime en un huso horario específico (preferiblemente el huso horario predeterminado de mi aplicación, no UTC)?
/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
Usando in_time_zone
no funciona debido a que simplemente convierte la hora GMT en cuando PDT, que es el mal hora:
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)
¡Esto es realmente útil! Pero, ¿qué ocurre si desea crear un tiempo en una zona diferente a la que configuró config.time_zone = en config/application.rb? – idrinkpabst
Usaría algo como ''2012-07-11 21: 00'.to_datetime.in_time_zone (' Eastern Time (US & Canada) ')' –
Esto en realidad no funciona. digamos que quieres crear un tiempo en la zona para las 9 am, hora del este. si lo hace '2012-07-11 09: 00'.to_datetime.in_time_zone (' Eastern Time (US & Canada) '), esto le devuelve el momento incorrecto porque se está convirtiendo de UTC. si lo hace '2012-07-11 09:00, hora del Este (EE. UU. y Canadá)'. hasta la hora del este (EE. UU. y Canadá), esto todavía no funciona porque DateTime es complicado cuando se trata de la luz del día tiempo de ahorro Es mejor evitar DateTime por completo. ¿Algunas ideas? – idrinkpabst