2013-10-16 58 views

回答

7

從軌道ActiveSupport::TimeZone docs

與Active支持捆綁的TZInfo的版本只包含必要的支持時區定義的區域定義類。如果您需要使用TimeZone未定義的區域,則需要安裝TZInfo gem(如果最新版本的gem已在本地安裝,則將使用該版本代替捆綁的版本。)

就我個人而言,我認爲Rails時區很愚蠢。它們被任意限制於Rails所描述的「146個區域的有意義的子集」。但他們無法解釋他們如何確定哪些區域「有意義」,哪些區域被丟棄。

標識符,如「美國/太平洋」被稱爲在TZDB數據「鏈接」或「別名」。我可以看到,也許它們可能從Rails中省略,但還有許多其他真實世界時區完全缺失。

我每天看到的唯一的地方Rails的時區標識符在現實世界中是Twitter的的API中。另一方面,IANA/TZDB標識符無處不在。

我能提供的最好建議是忘掉Rails的時區,並且只使用了Ruby TZInfo Gem直接。它具有包括別名在內的所有區域的完整TZDB實施。

如果您確實必須繼續使用Rails區域,則可以先使用TZInfo將別名解析爲實際區域,然後查看該區域是否位於Rails MAPPING字典中。例如:

"US/Pacific" => "America/Los_Angeles"     (via TZInfo) 

"America/Los_Angeles" => "Pacific Time (US & Canada)" (via Rails MAPPING) 

我相信當你通過TZInfo載入「美國/太平洋」,它將被繼承作爲LinkedTimezoneInfo對象,所以你可以從那裏使用link_to_identifier屬性。

+0

''''TZInfo :: Timezone.get('US/Pacific')。link_to_identifier''NoMethodError。 – ajbraus

+0

@ajbraus - 'America/Vancouver'是一個獨特的區域,而不是鏈接。所以它不會有'link_to_identifier'屬性。但是,唉,這不是Rails「有意義」區域列表中的區域。所以你可以在這裏做的事情不多,除了只使用TZInfo gem,而不是*嘗試將它們映射回Rails區域。 –

+0

@ajbraus - 看到您更新了您的評論以顯示「美國/太平洋」 - 這確實是一個鏈接。 –

1

在此命令將顯示144點時區的名字。

的ActiveSupport :: TimeZone.zones_map

+0

它沒有「」美國/太平洋「」 – user842563

相關問題