我这是如何返回困惑:这个Ruby函数在做什么?
def utc2user(t)
ENV["TZ"] = current_user.time_zone_name
res = t.getlocal
ENV["TZ"] = "UTC"
res
end
它首先将ENV变量,然后将“资源”到本地值,然后重新assignes ENV变量,然后返回资源?
不知道我明白这是从UTC到用户时区的会聚吗?
我这是如何返回困惑:这个Ruby函数在做什么?
def utc2user(t)
ENV["TZ"] = current_user.time_zone_name
res = t.getlocal
ENV["TZ"] = "UTC"
res
end
它首先将ENV变量,然后将“资源”到本地值,然后重新assignes ENV变量,然后返回资源?
不知道我明白这是从UTC到用户时区的会聚吗?
第一行是将环境时区变量设置为用户的时区,以便为该用户的正确时间获取res
值。如果它没有设置给用户,时间仍然是UTC。
然后它将环境变量设置回UTC时间,我假设它是应用程序的默认值。然后返回res
。
它通过在传入的Time
对象上调用getlocal
根据current_user.time_zone_name
指定的时区名称返回时间。
它然后复位当前时区为UTC并返回Time
对象从getlocal
返回那个调用的时间(即,当环境的时区是无论用户的时区)。
此函数将时间作为输入,它将用户时区传递给TZ,以便在调用getlocal方法时实际获得基于用户本地时区而不是UTC的时间。然后它将TZ envt变量恢复为UTC,并实际返回最后一行中的用户本地时区。
getlocal
方法使用 ENV [“TZ”],所以这只是一个小小的舞蹈,暂时设置它,使用它,然后把它放回去。
虽然在这种情况下,它被“放回”“UTC”,而不是之前的情况,这似乎有点可疑。无论如何,直接做这个的方法有in_time_zone
!
该代码是来自Rails Recipes书籍的一个示例。 – Zabba 2010-12-10 17:16:50
某些信息:http://wiki.rubyonrails.org/howtos/time-zones – Zabba 2010-12-10 17:17:56