【问题标题】:STD offset for pytz timezonespytz 时区的 STD 偏移量
【发布时间】:2013-08-10 12:13:07
【问题描述】:

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

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

是否可以从 pytz 时区对象中获取 STD 偏移量,而无需使用特定日期进行操作?

谢谢!

【问题讨论】:

    标签: python pytz timezone-offset django-timezone


    【解决方案1】:

    pytztzinfo 对象包含标记 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
    ...
    

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 2020-07-16
      • 2015-07-20
      • 2019-05-23
      • 2021-03-02
      • 2017-04-24
      • 2019-04-08
      • 2016-08-16
      • 2011-09-02
      相关资源
      最近更新 更多