我位于东部时间(ET(时区。落后UTC时间4小时。UTC是世界调节时钟和时间的标准。我正在使用Mac OSX。
我正在阅读这篇特定的文章。似乎建议Ruby默认使用UTC,如果未设置TZ
环境变量。他举了一个例子:
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 pm或军事时间16:30之后的一点。因此,实际上,当未设置TZ环境变量时,它给出了本地时间,而不是UTC时间。在将变量设置为时区之后,它给出了完全错误的时间。为什么当未设置环境变量时,我不会获得UTC时间,为什么当我将环境变量设置为时区时,我会得到错误的时间?
这是不正确的。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"