pytz.common_timezones是否有替代品

时间:2019-05-08 18:49:53

标签: python timezone pytz

我正在使用pytz模块,却被告知不能。

我想知道

pytz.common_timezones

我正在使用它来构建时区字典,以便我可以使用dateutil解析器将字符串转换为UTC,无论该字符串中的时区是什么。

这是我在做什么的一个例子

from pytz import utc
from dateutil import parser


def gen_tzinfos():
    for zone in pytz.common_timezones:
        try:
            tzdate = pytz.timezone(zone).localize(dt.utcnow(), is_dst=None)
        except pytz.NonExistentTimeError:
            pass
        else:
            tzinfo = gettz(zone)

            if tzinfo:
                yield tzdate.tzname(), tzinfo

TZINFOS = dict(gen_tzinfos())

# 2009-11-01 20:00:00-05:00
date_str1 = 'Sat, 11/01/09 8:37 PM PDT'
date_str2 = 'Sat, 11/01/09 8:37 PM CDT'
date_str3 = 'Sat, 11/01/09 8:37 PM EST'
date_str4 = 'Sat, 11/01/09 8:37 PM UTC'
date_str6 = '2009 April 19 2:29 PM CDT'



print date_str1, " = ", parser.parse(date_str1, tzinfos=TZINFOS)
print date_str2, " = ", parser.parse(date_str2, tzinfos=TZINFOS)
print date_str3, " = ", parser.parse(date_str3, tzinfos=TZINFOS)
print date_str4, " = ", parser.parse(date_str4, tzinfos=TZINFOS)
print date_str6, " = ", parser.parse(date_str6, tzinfos=TZINFOS)

任何人都可以建议另一种方法来获取字典TZINFOS吗?

2 个答案:

答案 0 :(得分:1)

common_timezones只不过是pytz/__init__.py中的一个列表。如果出于任何原因禁止使用pytz,请在列表中以换行符分隔的文本文件的形式复制该列表,然后将其读入。pytz来源提供了no indication至少从代码库中动态地进行修改。

列表中的字符串具有与dateutil.tz.gettz()兼容的格式,我想这是您的问题中引用的内容。

答案 1 :(得分:0)

您假设属于pytz.common_timezones中区域的所有缩写都是唯一且明确的。他们不是。例如,“ CST”可以属于America/ChicagoAmerica/HavanaAsia/Shanghai,所有这些偏移量都与UTC有很大的不同。

通常来说,您要执行的任务是不可能的。当您具有预定义的缩写词及其解释列表时,它仅在狭窄的条件下起作用。例如,如果您知道只有来自美国的带有英语时区缩写的数据,则可以创建一个字典,将这些缩写映射到它们的偏移量。然后,您可以将其传递给解析器的tzinfos参数。但是您不能简单地在全球所有时区构建这样的词典。这样做会导致许多冲突。