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

Posted

技术标签:

【中文标题】使用 pytz 获取时区的国家代码?【英文标题】:Get country code for timezone using pytz? 【发布时间】:2012-10-12 19:25:27 【问题描述】:

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

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

说明我可以反其道而行之,如:

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

但我需要反过来做。

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

【问题讨论】:

【参考方案1】:

您可以使用来自pytzcountry_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'

【讨论】:

如果在不同的国家使用相同的时区名称,它会中断。 country_timezones 中没有这样的名称。但是一些常见的时区不在其中,例如 UTC、美国/中部、美国/东部、加拿大/中部等 @J.F.Sebastian 你最后一句话是什么意思?这些时区不在什么地方? pytz 中定义的所有时区都映射到一个国家。因此,它不会中断。 @mohabitar:这些时区不在country_timezones 值中,因此使用country_timezones 生成的timezone_country 将为UTC、美国/中部等产生KeyError。 @mohabitar:如果您使用的时区不在country_timezones 值中,那么可以,这样的时区需要其他解决方案【参考方案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' 而不是 @987654331 @。

【讨论】:

以上是关于使用 pytz 获取时区的国家代码?的主要内容,如果未能解决你的问题,请参考以下文章

python Python国家代码,名称,大洲,首都和pytz时区列表

如何使用 pytz 从时区字符串中获取 UTC 偏移量?

pytz:获取所有时区,现在是特定时间

pytz:获取所有时区,现在在特定时间范围之间

python 通过pytz模块进行时区的转换,获取指定时区的时间

导入 pytz 失败时如何获取太平洋时区的当前时间?