2012-10-22 66 views
9

我正在使用pytz。我已經閱讀了整個文檔,但沒有看到如何做到這一點。使用pytz獲取時區的國家代碼?

我有一個時區:美國/芝加哥。我想要的是獲得這個時區的相應國家代碼:美國。

這表明,我可以做相反的事情,如:

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

,但我需要周圍的人它的其他方式。

這可以在Python中使用pytz(或任何其他方式)完成?

回答

9

您可以從pytz使用country_timezones對象,並生成一個逆映射:

現在只要使用產生的字典:

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

如果在不同的國家使用相同的時區名稱,它會中斷。 'country_timezones'中沒有這樣的名字。但是一些常見的時區不在其中,例如,UTC,美國/中部,美國/東部,加拿大/中部等等。 – 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,請將iteritems更改爲items,輸出將爲'CH'而不是u'CH'