Time.use_zone未按预期工作

时间:2012-01-03 22:52:40

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

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

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

5 个答案:

答案 0 :(得分:27)

这应该可行:

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

答案 1 :(得分:9)

请尝试在您的街区内使用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 

答案 2 :(得分:8)

如果您希望Time.current支持时区,请使用now。在时区感知应用程序中工作时Time.now是危险的,因为我从不使用Time.now Time.current,只使用2.hours.ago。像4.days.from_nowTime.current这样的Rails时间助手也基于{{1}}。

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

答案 3 :(得分:4)

Time.now - 使用服务器时间
Time.zone.now - 使用rails应用程序时间(在config:config.time_zone中)
Time.use_zone - 对给定的块使用“你的”时区


这个例子是错误的,因为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

答案 4 :(得分:-1)

请勿使用Time.now,而是使用您的本地时区,请使用Time.current

Time.use_zone('Hawaii') do
  p Time.current
end