使用pytz获取时区的国家/地区代码?

时间:2012-10-22 22:12:41

标签: python pytz

我正在使用pytz。我已经阅读了整个文档表,但没看到如何做到这一点。

我有一个时区:美国/芝加哥。我想要的是获取此时区的相应国家/地区代码:US。

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

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

但我需要反过来做。

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

2 个答案:

答案 0 :(得分:9)

您可以使用country_timezones中的pytz对象生成逆映射:

from pytz import country_timezones

timezone_country = {}
for countrycode in country_timezones:
    timezones = country_timezones[countrycode]
    for timezone in timezones:
        timezone_country[timezone] = countrycode

现在只使用生成的词典:

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

答案 1 :(得分:3)

这很容易。您将每个国家/地区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 vs. 3,所以我假设2.如果你在3,将iteritems更改为items,输出将是{{1而不是'CH'