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

2024-05-12 10:09:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用pytz。我已经看完了整个文档表,但不知道如何做到这一点。

我有一个时区:美国/芝加哥。我只想得到这个时区的国家代码:我们。

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

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

但我需要换一种方式。

这可以在Python中使用pytz(或者其他方法)完成吗?


Tags: 方法代码文档方式国家ch事情country
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'

旁注:你没有提到Python2和3,所以我假设是2。如果在3上,将iteritems更改为items,输出将是'CH',而不是u'CH'

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

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'

相关问题 更多 >