2010-12-10 17 views
6

estoy confundido sobre cómo vuelve este:¿Qué está haciendo esta función de Ruby?

def utc2user(t) 
    ENV["TZ"] = current_user.time_zone_name 
    res = t.getlocal 
    ENV["TZ"] = "UTC" 
    res 
end 

En primer lugar, establece la variable ENV, a continuación, establece 'res' para el valor local, luego re-assignes variables ENV y después regresar al res?

No estoy seguro Entiendo cómo esto se está convirtiendo de UTC a la zona horaria del usuario?

+0

Alguna información: http://wiki.rubyonrails.org/howtos/time-zones – Zabba

Respuesta

7

La primera línea es establecer la variable de zona horaria ambiental en la zona horaria del usuario para obtener el valor res en la hora correcta para ese usuario. Si no lo configuraba para el usuario, el tiempo seguiría estando en UTC.

A continuación, establece la variable de entorno a la hora UTC, que supongo que es la predeterminada de la aplicación.

Devuelve res.

2

Devuelve la hora según el nombre de zona horaria especificado por current_user.time_zone_name invocando getlocal en el objeto Time pasado.

Es entonces se restablece la zona de tiempo actual al UTC y devuelve el objeto Time volvió de getlocalen el momento de que la invocación (es decir, cuando la zona horaria del medio ambiente era lo que la zona horaria del usuario es).

2

Esta función toma el tiempo como entrada, pasa la zona horaria de los usuarios a la TZ de modo que cuando se llama al método getlocal realmente obtiene el tiempo basado en la zona horaria local del usuario y no en UTC. A continuación, revierte la variable de entorno TZ de nuevo a UTC y realmente devuelve la zona horaria local de los usuarios en la última línea.

4

El getlocal método utiliza ENV [ "TZ"], por lo que este es sólo un poco de baile para establecer temporalmente, usarlo, y luego volverlo a poner.

Aunque en este caso se está "regresando" a "UTC", no lo que era antes, lo que parece un poco dudoso. ¡Y hay un método in_time_zone para hacer esto directamente, de todos modos!

+0

El código es una muestra del libro Rails Recipes. – Zabba

Cuestiones relacionadas