2010-12-10 81 views
6

我这是如何返回困惑:这个Ruby函数在做什么?

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

它首先将ENV变量,然后将“资源”到本地值,然后重新assignes ENV变量,然后返回资源?

不知道我明白这是从UTC到用户时区的会聚吗?

+0

某些信息:http://wiki.rubyonrails.org/howtos/time-zones – Zabba 2010-12-10 17:17:56

回答

7

第一行是将环境时区变量设置为用户的时区,以便为该用户的正确时间获取res值。如果它没有设置给用户,时间仍然是UTC。

然后它将环境变量设置回UTC时间,我假设它是应用程序的默认值。然后返回res

2

它通过在传入的Time对象上调用getlocal根据current_user.time_zone_name指定的时区名称返回时间。

它然后复位当前时区为UTC并返回Time对象从getlocal返回那个调用的时间(即,当环境的时区是无论用户的时区)。

2

此函数将时间作为输入,它将用户时区传递给TZ,以便在调用getlocal方法时实际获得基于用户本地时区而不是UTC的时间。然后它将TZ envt变量恢复为UTC,并实际返回最后一行中的用户本地时区。

4

getlocal方法使用 ENV [“TZ”],所以这只是一个小小的舞蹈,暂时设置它,使用它,然后把它放回去。

虽然在这种情况下,它被“放回”“UTC”,而不是之前的情况,这似乎有点可疑。无论如何,直接做这个的方法有in_time_zone

+0

该代码是来自Rails Recipes书籍的一个示例。 – Zabba 2010-12-10 17:16:50