我对如何返回感到困惑:
def utc2user(t)
ENV["TZ"] = current_user.time_zone_name
res = t.getlocal
ENV["TZ"] = "UTC"
res
end
首先设置ENV变量,然后将'res'设置为本地值,然后重新分配ENV变量,然后返回res?
我不确定我是否理解这是如何从UTC转换到用户时区的?
答案 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,并实际返回最后一行中的用户本地时区。