2012-10-22 17 views
9

私はpytzを使用しています。私はドキュメンテーションシート全体を読んだが、これがどうやってできるのか分からなかった。pytzを使用してタイムゾーンの国コードを取得しますか?

タイムゾーンはアメリカ/シカゴです。私が望むのは、このタイムゾーンのそれぞれの国コードを取得することです:US。

それは、次のような、私は反対のことを行うことができますことを示しています

>>> country_timezones('ch') 
['Europe/Zurich'] 
>>> country_timezones('CH') 
['Europe/Zurich'] 

が、私はそれを他の方法で回避を行う必要があります。

pytz(またはそれ以外の方法で)を使ってPythonでこれを行うことはできますか?

答えて

9

あなたはpytzからcountry_timezonesオブジェクトを使用し、逆マッピングを生成することができます。

は今だけ結果の辞書を使用します。

>>> timezone_country['Europe/Zurich'] 
u'CH' 
+0

異なる国で同じタイムゾーン名が使用されていると、それは壊れてしまいます。 'country_timezones'にはそのような名前はありません。しかし、いくつかの一般的なタイムゾーンはUTC、US/Central、US/Eastern、Canada/Centralなどではありません。 – jfs

+0

@ J.F.Sebastian最後の文章は何を意味しましたか?それらのタイムゾーンは何に含まれていませんか? – Snowman

+0

'pytz'で定義されたすべてのタイムゾーンはちょうど一つの国にマップされています。したがって、それは壊れません。 – jsalonen

2

これは簡単です。 dictは各国をタイムゾーンのリストにマッピングしています。各listメンバーをdictに戻したいとします。

ちょうど答えを出すのではなく、それを得る方法を見てみましょう。あなただけの単一のタイムゾーンにそれぞれの国をマッピングdictを持っていた場合

まず、これは単純な逆マッピング次のようになります。

timezone_countries = {timezone: country 
         for country, timezone in country_timezones.iteritems()} 

しかし、これは動作しません。タイムゾーンのリストへのマッピングがあり、そのリストの各タイムゾーンを国に戻したいとします。その英語の説明「そのリスト内の各タイムゾーンは、」Pythonのに自明翻訳可能である:それはアクションである。ここ

timezone_countries = {timezone: country 
         for country, timezones in country_timezones.iteritems() 
         for timezone in timezones} 

>>> from pytz import country_timezones 
>>> timezone_countries = {timezone: country 
          for country, timezones in country_timezones.iteritems() 
          for timezone in timezones} 
>>> timezone_countries['Europe/Zurich'] 
u'CH' 

サイドノート:あなたは、Python 2対3は言及しませんでした、だから私は2と仮定した。あなたが3の場合、をitemsに変更すると、出力はu'CH'ではなく'CH'になります。

関連する問題