2016-02-18 105 views
1

我試圖將外部時區字段的日期時間轉換爲UTC。有人可以向我解釋爲什麼這不起作用嗎?Rails - 時區轉換

time_str = '2016-03-01 00:00' 
zone_str = 'Pacific Time (US & Canada)' 

Time.use_zone(zone_str) { Time.parse(time_str).in_time_zone('UTC') } 

我很期待:

'2016-03-01 08:00' 

什麼我越來越:

'2016-03-01 06:00' 

基本上,這是無視我use_zone電話,只是用我的本地時區,這是中央。

我應該做些什麼呢?

- 編輯 -

請注意,我不是要設置整個應用程序的時區。我只是試圖採取一組輸入(時間和時區在單獨的表單域),並將其轉換爲UTC。

+1

我接受了@伊利亞的解決方案,但我發現我的特定代碼的問題。 'Time.use_zone(zone_str){Time.zone.parse(time_str).in_time_zone('UTC')}'我在做'Time.parse'而不是'Time.zone.parse'。 –

回答

3

嘗試這種解決方案:

time = ActiveSupport::TimeZone.new(zone_str).parse(time_str) 
time.in_time_zone('UTC') 
#=> Tue, 01 Mar 2016 08:00:00 UTC +00:00 
+0

是的,就是這樣! –

1
time_str = '2016-03-01 00:00' 
zone_str = 'Pacific Time (US & Canada)' 
time = ActiveSupport::TimeZone.new(zone_str).parse(time_str) 
time.in_time_zone('UTC') 

使用上面的代碼。

+0

我不想將它分配給整個應用程序 - 僅限於一組輸入。 –

+0

所以你通過逐字拷貝正確的答案改變了你的錯誤答案? –

0

試試這個:

time_str = '2016-03-01 00:00' 
zone_str = 'Pacific Time (US & Canada)' 
Time.zone = zone_str 
Time.zone.parse(time_str).in_time_zone("UTC") 
+0

這是有效的,但是設置'Time.zone'有危險,只能用於單個請求。顯然,這可能會泄漏到線程中的下一個請求中。 –