2013-03-15 62 views
4

我在Rails 3.2中運行,我找不到一個很好的方法來解析在任意時區給我的時間。在ruby中解析任意gmt偏移量的時間

作爲一個例子,這是我在不同的鍵

提供的格式
{ 
    "start_date"=>"2013-04-24 13:00:00", 
    "timezone"=>"America/Los_Angeles", 
    "timezone_offset"=>"GMT-0700", 
    ... 
} 

This question非常接近與回答它:

time = ActiveSupport::TimeZone.new('UTC').parse('2010-02-05 01:00:01') 

問題是,當我把「美國/ Los_Angeles「作爲Timezone.new的參數,它將吐出GMT-8的時區,我認爲由於DST的變化。另一方面,我收到的數據定義了GMT的時區偏移量。所以對於我的例子來說,所需的輸出是GMT-7的時區。

如果我知道gmt偏移量,而不是使用時區名稱,有什麼辦法獲得時區嗎?

回答

4

您可以在ActiveSupport::Timezone上使用[],以小時爲單位傳遞gmt偏移量作爲參數。

如所看到的上api.rubyonrails.org

[](arg)

查找一個特定的時間區的對象。如果參數是一個 字符串,則它被解釋爲意味着要定位的時區的名稱。 如果它是一個數值,則它是要查找的時區的小時偏移量或第二個偏移量。 (具有該偏移量的第一個將返回 。)如果系統未知道此類時區,則返回nil。

代碼示例:

ActiveSupport::TimeZone["America/Los_Angeles"]        
=> (GMT-08:00) America/Los_Angeles 
ActiveSupport::TimeZone[-8]        
=> (GMT-08:00) America/Los_Angeles 

所以,你會做的是:

time = ActiveSupport::TimeZone[-7].parse('2013-04-24 13:00:00') 

但是,要小心,因爲偏移量可能相當於多了一個時區,因爲很多時區可以在相同的偏移量上。

+1

太棒了,謝謝,我知道它採取了字符串,不知道它也採取了抵消時間。 – Tal 2013-03-19 19:44:09

相關問題