Time.use_zone未按预期工作

所以现在是旧金山太平洋标准时间下午2:54。 出于某种原因,此代码块未在夏威夷12:54 PM HST返回。 我在这里错过了什么吗? 我希望这段代码能让我回到夏威夷的当前时间

Time.use_zone('Hawaii') do Time.now end # => 2012-01-03 14:54:54 -0800 

这应该工作正常:

 Time.use_zone('Hawaii') do p Time.zone.now end 

尝试在块内使用Time.now.in_time_zone

 > Time.use_zone('Hawaii') do > Time.now.in_time_zone > end => Tue, 03 Jan 2012 13:07:06 HST -10:00 

如果您now需要时区支持,请使用Time.currentTime.now在使用时区感知应用程序时很危险,因为经验法则我从不使用Time.now ,只使用Time.current 。 像2.hours.ago4.days.from_now这样的Rails时间助手也基于Time.current

此外,这是一篇很棒的文章,底部有一个很好的备忘单: http : //www.elabs.se/blog/36-working-with-time-zones-in-ruby-on-rails

Time.now – 使用服务器时间
Time.zone.now – 使用rails应用程序时间(在config:config.time_zone中)
Time.use_zone – 为给定的块使用’your’时区

这个例子是错误的,因为Time.now在您的服务器时区获得时间并且方法in_time_zone将时间转换为夏威夷时区的等效时间。 但它现在不是夏威夷的时间! 这是夏威夷的utc偏移量的服务器时间。

 Time.use_zone('Hawaii') do Time.now.in_time_zone end => Wed, 14 Aug 2013 10:33:18 HST -10:00 Time.now.in_time_zone => Thu, 15 Aug 2013 00:32:30 MSK +04:00 

为了在夏威夷时区获得时间,你必须使用

 Time.use_zone('Hawaii') do Time.zone.now end