2013-10-29 16 views
1

我有一個代表日期時間的字符串。例如:使用Rails和ActiveSupport,考慮到Dayling Time Saving,我怎樣才能獲得時區的偏移量?

「2013-10-29T08:30:00」

不具有時區信息,但我知道,它代表了特定的時間段,例如時間「中部時間(美國&加拿大)」

我想創建一個正確的時區信息正確DateTime對象,但我不能這樣做,因爲我不知道我是否應該使用「-06:00」或「-05:00」作爲抵消(由於DST)。

任何幫助?

回答

3

根本不用擔心DST :) ActiveSupport將爲您提供幫助。

Time.zone = "Central Time (US & Canada)" 

t = Time.zone.parse "2013-10-29T08:30:00" 
#=> Tue, 29 Oct 2013 08:30:00 CDT -05:00 

t.dst? 
#=> true 

價約時區設置和dst?http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html

更新:上述塊是用於示出的目的。在應用程序,你可以在config/application.rb

config.time_zone = 'Central Time (US & Canada)' 

此設置時區將設置默認Time.zone讓您不再需要上面第一行代碼。

+0

ActiveRecord還應該將數據庫中的所有內容都存儲爲UTC,因此,只要知道哪些時區正在轉換之間,轉換進/出不同時區*應該也是微不足道的。 – jefflunt

+1

@jefflunt,感謝您的提示,我已經更新了答案。另外我猜OP的時間記錄不是來自始終附有UTC的ActiveRecord。 –

+0

@BillyChan謝謝你的回答。因此,如果我不想更改全球時區('Time.zone = xxxx'),我想我必須首先將它保存在一個臨時變量中(例如'temp = Time.zone'),然後更改它,然後解析,然後恢復到保存的時區。那是對的嗎? –