2012-01-03 98 views
15

因此,現在是舊金山太平洋標準時間下午2點54分。由於某些原因,這個代碼塊並沒有在夏威夷時間12:54 PM返回HST。我在這裏錯過了什麼嗎?我希望這段代碼能夠在夏威夷返回當前時間Time.use_zone未按預期工作

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

回答

27

這應該可以工作:

Time.use_zone('Hawaii') do 
    p Time.zone.now 
end 
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 
4

Time.now - 使用服務器時間
Time.zone.now - 使用Rails應用程序的時間(在配置:config.time_zone)
時間。 use_zone - 用「你的」時區的給定塊


這個例子是錯誤的,因爲Time.now在SERV獲取時間呃時區以及方法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 

爲了得到時間在夏威夷時區,如果你想與now支持時區必須使用

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

使用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