是否有pytz.common_时区的替代品

2024-04-29 08:16:27 发布

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

我当时正在使用pytz模块,有人告诉我不能

我想知道是否有替代品/替代品

pytz.common_timezones

我使用它来构建时区的dict,这样我就可以使用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吗


Tags: parserzonedateparsesatdictprinttzinfo
2条回答

您假设属于pytz.common_timezones区域的所有缩写都是唯一且明确的。事实并非如此。例如,“CST”可以属于America/ChicagoAmerica/HavanaAsia/Shanghai——所有这些都与UTC有非常不同的偏移量

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

^{}不过是pytz/__init__.py中的一个列表。如果出于任何原因禁止您使用pytz,请将列表作为换行符分隔的文本文件本地复制并读入。有no indication来自pytz源,它是动态生成的,至少是从代码库生成的,也就是说

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

相关问题 更多 >