PYTZ.COMMON_TIMEZONES是否有替换



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

我想知道是否在任何地方都有替换/替换

pytz.common_timezones

我正在使用它来构建时区的dist,以便我可以使用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)

任何人都可以提出一种替代方法来获取dict tzinfos?

common_timezones不过是位于 pytz/__init__.py中的列表。如果出于任何原因,您禁止使用pytz,请在本地复制列表为新线划分的文本文件并将其读取。从pytz源没有迹象表明它是动态生成的,至少是从代码库中生成的。

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

您假设pytz.common_timezones中属于区域的所有缩写都是独特而明确的。他们不是。例如," CST"可以属于America/ChicagoAmerica/HavanaAsia/Shanghai-所有这些都与UTC具有非常不同的偏移。

一般来说,您正在尝试的任务是不可能的。它只有在狭窄的条件下起作用,当您有预定义的缩写列表及其解释清单。例如,如果您知道自己只有来自美国英语时区缩写的数据,那么您可以创建一个词典将这些缩写映射到其偏移中。然后,您可以将其传递给解析器的tzinfos参数。但是,您不能简单地从全球范围内构建这样的词典。这样做会导致许多冲突。

相关内容

  • 没有找到相关文章

最新更新