Ruby中的UTC和本地时区

时间:2018-03-29 20:37:37

标签: ruby timezone

我位于东部时间(ET)时区。它比UTC时间晚了4个小时。 UTC是世界规范时钟和时间的标准。我正在使用Mac OSX。

我正在读这篇特别的article。似乎暗示如果未设置TZ环境变量,Ruby默认使用UTC。他举了一个例子:

ENV["TZ"]
#=> nil

Time.now
#=> 2015-12-08 10:30:00 -0200

ENV["TZ"] = "America/Los_Angeles"
#=> "America/Los_Angeles"

Time.now
#=> 2015-12-08 04:30:14 -0800

设置环境变量后,Ruby将使用该时区。所以我在irb中尝试了它:

ENV["TZ"]
 => nil 
Time.now
 => 2018-03-29 16:30:21 -0400
ENV["TZ"] = 'Eastern Time (US & Canada)'
 => "Eastern Time (US & Canada)" 
Time.now
 => 2018-03-29 20:30:40 +0000 

现在是军事时间下午4:30或16:30之后的一点点。实际上,当未设置TZ环境变量时,它给出了本地时间,而不是UTC时间。在我将变量设置为我的时区之后,它给出了一个完全错误的时间。为什么我没有设置环境变量时没有设置UTC时间?为什么在将环境变量设置为我的时区时会得到错误的时间?

1 个答案:

答案 0 :(得分:3)

这是不正确的。 Ruby将从您的计算机中获取时区,而不是默认使用UTC。

至于为什么

ENV["TZ"] = 'Eastern Time (US & Canada)'

没有改变到东部的时间是因为正确的方法是:

ENV["TZ"] = 'US/Eastern'

ENV["TZ"]中的值不是nil但未被识别时,Ruby默认为UTC

Time.now.zone # => "EEST"

ENV["TZ"] = 'Some gibberish'
Time.now.zone # => "UTC"

ENV["TZ"] = 'US/Eastern'
Time.now.zone # => "EDT"