pytz 时区的 STD 偏移量
Posted
技术标签:
【中文标题】pytz 时区的 STD 偏移量【英文标题】:STD offset for pytz timezones 【发布时间】:2013-08-10 12:13:07 【问题描述】:我想将 UTC 偏移量从tz database 添加到时区列表,例如: * (UTC +0) 欧洲/伦敦
对于时区列表,我使用pytz.common_timezones,但无法检索时区的 STD utcoffset,因为时区对象上的所有方法都需要 dt 对象、时刻、何时计算偏移量。
是否可以从 pytz 时区对象中获取 STD 偏移量,而无需使用特定日期进行操作?
谢谢!
【问题讨论】:
【参考方案1】:pytz
tzinfo
对象包含标记 STD 和 DST 之间边界的 UTC 转换时间。然而,访问这些信息需要深入了解它们的私有属性——尤其是,
tzone._utc_transition_times
,tzone._transition_info
。所以接下来的内容很脆弱——pytz
不保证您可以在未来的版本中以相同的方式访问相同的信息。
尽管如此,至少对于 pytz 版本 2010b,使用上面的属性,您可以在 STD 中找到最近时期的日期。然后您可以使用std_date.strftime('%z')
打印偏移量。
import pytz
import datetime as DT
NOW = DT.datetime.now()
ZERO = DT.timedelta(0)
for tname in pytz.common_timezones:
tzone = pytz.timezone(tname)
std_date = None
try:
for utcdate, info in zip(
tzone._utc_transition_times, tzone._transition_info):
utcoffset, dstoffset, tzname = info
if dstoffset == ZERO:
std_date = utcdate
if utcdate > NOW:
break
except AttributeError:
std_date = NOW
std_date = tzone.localize(std_date)
print('n UTCz'.format(n=tname, z=std_date.strftime('%z')))
打印
Africa/Abidjan UTC+0000
Africa/Accra UTC+0000
Africa/Addis_Ababa UTC+0235
Africa/Algiers UTC+0000
Africa/Asmara UTC+0235
Africa/Bamako UTC+0000
Africa/Bangui UTC+0114
Africa/Banjul UTC+0000
...
【讨论】:
以上是关于pytz 时区的 STD 偏移量的主要内容,如果未能解决你的问题,请参考以下文章
Python pytz 时区转换返回的值与不同日期的时区偏移量不同
带有 pytz 时区的日期时间。不同的偏移量取决于 tzinfo 的设置方式[重复]