Time.use_zone未按预期工作

den*_*iss 17 ruby ruby-on-rails 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 
Run Code Online (Sandbox Code Playgroud)

Mar*_*oda 28

这应该工作正常:

Time.use_zone('Hawaii') do
  p Time.zone.now
end
Run Code Online (Sandbox Code Playgroud)


Dyl*_*kow 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 
Run Code Online (Sandbox Code Playgroud)


Gre*_*sen 9

使用Time.current,如果你想now用的时区支持.Time.now在一个时区感知应用程序时,根据经验我从来没有使用的规则是危险的Time.now,唯一的Time.current.Rails时间帮助者也喜欢2.hours.ago4.days.from_now基于Time.current它们.

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


Ale*_*gin 5

Time.now - 使用服务器时间
Time.zone.now - 使用 Rails 应用程序时间(在配置中: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 
Run Code Online (Sandbox Code Playgroud)

要获得夏威夷时区的时间,您必须使用

Time.use_zone('Hawaii') do
  Time.zone.now
end
Run Code Online (Sandbox Code Playgroud)