我位于东部时间(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时间?为什么在将环境变量设置为我的时区时会得到错误的时间?
答案 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"