pytz时区的STD偏移量

时间:2013-08-08 17:01:08

标签: python pytz timezone-offset django-timezone

我想将UTC偏移量添加到tz database的时区列表中,例如: *(UTC +0)欧洲/伦敦

对于时区列表,我使用pytz。common_timezones,但无法检索时区的STD utcoffset,因为timezone对象上的所有方法都需要dt对象,时刻,何时计算偏移量。

在没有特定日期操作的情况下从pytz时区对象获取STD偏移是可行的吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

pytz tzinfo个对象包含标记STD和DST之间边界的UTC转换时间。但是,访问此信息需要深入了解其私有属性 - 特别是 tzone._utc_transition_timestzone._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} UTC{z}'.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
...