【问题标题】:get the DST boundaries of a given timezone in python在python中获取给定时区的DST边界
【发布时间】:2011-11-14 11:04:52
【问题描述】:

是否可以使用 pytz 获取给定时区的 DST 边界?

【问题讨论】:

    标签: python pytz


    【解决方案1】:

    似乎没有官方支持。但是,您可以戳 DstTzInfo 对象的内部并从那里获取它:

    >>> from pytz import timezone
    >>> tz = timezone('Europe/London')
    >>> tz._utc_transition_times
    [datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1916, 5, 21, 2, 0),
    ...
    datetime.datetime(2036, 3, 30, 1, 0), datetime.datetime(2036, 10, 26, 1, 0),
    datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)]
    

    每个条目对应_transition_info中的一个条目:

    >>> tz._transition_info
    [(datetime.timedelta(0), datetime.timedelta(0), 'GMT'),
    (datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
    ...
    (datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
    (datetime.timedelta(0), datetime.timedelta(0), 'GMT'),
    (datetime.timedelta(0, 3600), datetime.timedelta(0, 3600), 'BST'),
    (datetime.timedelta(0), datetime.timedelta(0), 'GMT')]
    

    来源告诉我们这些是什么意思:

    _utc_transition_times = None # Sorted list of DST transition times in UTC
    _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding
                            # to _utc_transition_times entries
    

    当然,这是依赖于实现的,您可能希望依赖于已知可以工作的特定 pytz 版本。

    【讨论】:

    • 不确定最后一句话是什么意思。 Pytz 有其他类似的修改,但实际上是否有不同的实现?
    • 谁知道?您正在访问以下划线开头的字段,这不是文档化 API 的一部分。 pytz 作者可能随时更改它。
    • 现在核心 Python 中有实现吗?
    • 看起来不像。
    • python 3.9 有zoneinfo,大致相当于 pytz ——但是这个技巧对它不起作用:)
    猜你喜欢
    • 2017-05-02
    • 1970-01-01
    • 2022-06-27
    • 2011-10-23
    • 2016-12-07
    • 1970-01-01
    • 2016-12-19
    • 2018-03-02
    相关资源
    最近更新 更多