2013-10-16 5 views

答えて

7

:アクティブサポートにバンドルtzinfoのバージョンのが唯一のタイムゾーンで定義されたゾーンをサポートするために必要な定義が含まれ

クラス。 TimeZoneで定義されていないゾーンを使用する必要がある場合は、TZInfo gemをインストールする必要があります(最新バージョンのgemがローカルにインストールされている場合は、バンドルされたバージョンの代わりに使用されます)。

個人的には、Railsのタイムゾーンは馬鹿だと思います。それらは、Railsが「146ゾーンの意味のあるサブセット」と表現するものに任意に制限されています。しかし、どのゾーンが「意味のある」ゾーンであり、どのゾーンが破棄されるのかを説明する方法は何もありません。

"US/Pacific"などの識別子は、TZDBデータの "リンク"または "エイリアス"として知られています。おそらくそれらがRailsから省略されるかもしれないが、実際には欠けている他の多くの現実世界のタイムゾーンがあることがわかりました。

現実世界で私が見たことのある唯一の場所は、Twitter APIです。一方、IANA/TZDB識別子は遍在しています。

最高のアドバイスは、Railsのタイムゾーンを忘れて、Ruby TZInfo Gemを直接使用することです。エイリアスを含むすべてのゾーンで完全なTZDBを実装しています。

Railsゾーンを引き続き使用する必要がある場合は、まずTZInfoを使用して実際のゾーンへのエイリアスを解決し、そのゾーンがRails MAPPING辞書にあるかどうかを確認できます。たとえば:あなたはそこからlink_to_identifier属性を使用することができますので、私はあなたが「米国/太平洋」をロードする際に信じて

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

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

tzinfoのを経由して、それは、LinkedTimezoneInfoオブジェクトとしてサブクラス化されます。

+0

" '' TZInfo :: Timezone.get( 'US/Pacific')。link_to_identifier''''NoMethodErrorはありません。 – ajbraus

+0

@ajbraus - 'America/Vancouver'はリンクではなく別のゾーンです。したがって、 'link_to_identifier'属性を持たないでしょう。しかし、悲しいかな、それはRailsの "意味のある"ゾーンのリストにあるゾーンではありません。したがって、TZInfo gemを排他的に使用し、それらをRailsゾーンにマッピングしないようにすることを除いて、ここではできることはあまりありません。 –

+0

@ajbraus - 「US/Pacific」を表示するためにあなたのコメントを更新しました。本当にリンクです。 –

関連する問題