2012-01-03 30 views
15

Así que ahora son las 2:54 PM PST en San Francisco. Por alguna razón, este bloque de código no regresa a las 12:54 p.m. HST en Hawai. ¿Me estoy perdiendo de algo? Yo esperaría que este código me devuelve la hora actual en HawaiTime.use_zone no funciona como se esperaba

Time.use_zone('Hawaii') do 
    Time.now 
end 
# => 2012-01-03 14:54:54 -0800 

Respuesta

27

Esto debería funcionar bien:

Time.use_zone('Hawaii') do 
    p Time.zone.now 
end 
9

Trate de usar Time.now.in_time_zone dentro de su bloque en su lugar.

> Time.use_zone('Hawaii') do 
> Time.now.in_time_zone 
> end 
=> Tue, 03 Jan 2012 13:07:06 HST -10:00 
4

Time.now - usando la hora del servidor
Time.zone.now - el uso de tiempo de aplicación carriles (en config: config.time_zone)
tiempo. use_zone - usando 'su' zona horaria para el bloque dado


Este ejemplo es incorrecto, porque Time.now obtiene tiempo en su servicio La zona horaria y el método in_time_zone traducen el tiempo a una hora equivalente en la zona horaria de Hawaii. ¡Pero no es hora actual en Hawaii! Es el tiempo de su servidor con utc offset para Hawaii.

Time.use_zone('Hawaii') do 
    Time.now.in_time_zone 
end 
=> Wed, 14 Aug 2013 10:33:18 HST -10:00 

Time.now.in_time_zone 
=> Thu, 15 Aug 2013 00:32:30 MSK +04:00 

Para la obtención de vez en Hawai zona horaria debe utilizar

Time.use_zone('Hawaii') do 
    Time.zone.now 
end 
8

Uso Time.current si quieres now con el apoyo de zona horaria. Time.now es peligroso cuando se trabaja en una aplicación consciente de la zona horaria, como regla general, nunca uso Time.now, solo Time.current. Los auxiliares de tiempo de rieles como 2.hours.ago y 4.days.from_now se basan en Time.current también.

Además, este es un gran artículo con una gran hoja de trucos en la parte inferior: http://www.elabs.se/blog/36-working-with-time-zones-in-ruby-on-rails

Cuestiones relacionadas