Ruby的UTC和本地时区



我位于东部时间(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"

相关内容

  • 没有找到相关文章

最新更新