pytz.common_timezones 有替代品吗
Is there a replacement for pytz.common_timezones
我正在使用 pytz 模块,但被告知我不能。
我想知道
是否有 replacement/substitution
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 的方法?
common_timezones
is nothing more than a list sitting in pytz/__init__.py
. If for whatever reason you're forbidden from using pytz
, copy the list locally as a newline-delimited text file and read it in. There's no indication 从 pytz
来源得知它是动态生成的,至少是从代码库生成的,也就是说。
列表中的字符串采用与 dateutil.tz.gettz()
兼容的格式,我猜这就是您的问题中引用的内容。
您假设属于 pytz.common_timezones
中区域的所有缩写词都是唯一且明确的。他们不是。例如,"CST" 可能属于 America/Chicago
、America/Havana
或 Asia/Shanghai
- 所有这些都与 UTC 具有非常不同的偏移量。
一般来说,您正在尝试的任务是不可能完成的。它只在狭窄的条件下工作,当您有一个预定义的缩写列表及其解释时。例如,如果您知道您只有来自美国的英语时区缩写的数据,那么您可以创建一个字典,将这些缩写映射到它们的偏移量。然后您可以将其传递给解析器的 tzinfos
参数。但是你不能简单地从全球所有时区构建这样一个字典。这样做会导致很多冲突。
我正在使用 pytz 模块,但被告知我不能。
我想知道
是否有 replacement/substitutionpytz.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 的方法?
common_timezones
is nothing more than a list sitting in pytz/__init__.py
. If for whatever reason you're forbidden from using pytz
, copy the list locally as a newline-delimited text file and read it in. There's no indication 从 pytz
来源得知它是动态生成的,至少是从代码库生成的,也就是说。
列表中的字符串采用与 dateutil.tz.gettz()
兼容的格式,我猜这就是您的问题中引用的内容。
您假设属于 pytz.common_timezones
中区域的所有缩写词都是唯一且明确的。他们不是。例如,"CST" 可能属于 America/Chicago
、America/Havana
或 Asia/Shanghai
- 所有这些都与 UTC 具有非常不同的偏移量。
一般来说,您正在尝试的任务是不可能完成的。它只在狭窄的条件下工作,当您有一个预定义的缩写列表及其解释时。例如,如果您知道您只有来自美国的英语时区缩写的数据,那么您可以创建一个字典,将这些缩写映射到它们的偏移量。然后您可以将其传递给解析器的 tzinfos
参数。但是你不能简单地从全球所有时区构建这样一个字典。这样做会导致很多冲突。