这个Ruby函数在做什么?

时间:2010-12-10 04:21:17

标签: ruby-on-rails ruby

我对如何返回感到困惑:

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

首先设置ENV变量,然后将'res'设置为本地值,然后重新分配ENV变量,然后返回res?

我不确定我是否理解这是如何从UTC转换到用户时区的?

4 个答案:

答案 0 :(得分:7)

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

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

然后返回res

答案 1 :(得分:4)

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

虽然在这种情况下它被“回”到“UTC”,而不是之前的状态,这看起来有点可疑。无论如何,还有in_time_zone方法直接执行此操作!

答案 2 :(得分:2)

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

然后将当前时区重置为UTC并返回在调用时从Time 返回的getlocal对象(即当环境的时区是什么时候用户的时区是)。

答案 3 :(得分:2)

此函数将时间作为输入,它将用户时区传递给TZ,这样当调用getlocal方法时,它实际上会根据用户本地时区而不是UTC获取时间。然后它将TZ envt变量恢复为UTC,并实际返回最后一行中的用户本地时区。