如何确定 DST 何时在 Python 中的特定位置开始或结束? [复制]

Posted

技术标签:

【中文标题】如何确定 DST 何时在 Python 中的特定位置开始或结束? [复制]【英文标题】:How to determine when DST starts or ends in a specific location in Python? [duplicate] 【发布时间】:2011-11-27 12:32:33 【问题描述】:

我正在寻找一种方法来确定我正在处理的 Python 脚本中给定时区的 DST 何时开始或结束。

我知道pytz 可以将我正在工作的 UTC 日期转换为本地时间,并将 DST 考虑在内,但是对于这个特定的应用程序,我需要知道转换的点。

有什么建议吗?

【问题讨论】:

哪一年? DST 更改点在某些时区的历史记录中发生了变化。 嗯,理想情况下,我希望能够在任意一年内完成。我知道 Olsen 数据库中提供了此类信息,但访问它是另一回事。 【参考方案1】:

您可以查看您正在使用的时区的_utc_transition_times 成员。

>>> from pytz import timezone
>>> tz = timezone("Europe/Paris")
>>> print tz._utc_transition_times

[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1911, 3, 10, 23, 51, 39), datetime.datetime(1916, 6, 14, 23, 0), datetime.datetime(1916, 10, 1, 23, 0), date
....
 datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)]

它将为您提供 DST 更改日期列表(DST 的开始和结束)。

根据tzinfo.py的代码

class DstTzInfo(BaseTzInfo):
    '''A timezone that has a variable offset from UTC

    The offset might change if daylight savings time comes into effect,
    or at a point in history when the region decides to change their
    timezone definition.
    '''
    # Overridden in subclass
    _utc_transition_times = None # Sorted list of DST transition times in UTC
    _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding
                            # to _utc_transition_times entries

因此,如果您将_utc_transition_times_transition_info 混合使用,您将获取所有需要的信息、日期、时间和偏移量以进行应用;)

【讨论】:

这看起来很不错。不知道那个属性。 我一回家就试一试,谢谢。这些日期是否标志着 DST 的开始或结束? 对于欧洲/巴黎,夏令时的开始时间大多在三月,结束时间是九月/十月。但由于这些日期是变化,您可以指望此列表中的奇数/偶数位置。 @Smingos :日期是每年 DST 的开始和结束,我用我在 pytz 代码中找到的信息更新了我的答案。 听起来很完美。正如我所说,我今晚会试一试。再次感谢!

以上是关于如何确定 DST 何时在 Python 中的特定位置开始或结束? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何确定给定时区中的给定时间是不是在postgresql中是DST?

Python & pytz:确定时区是不是支持 DST 以及 DST 和非 DST UTC 偏移量是多少

Delphi定位TDataSet数据集最后一条记录

如何确定 Rust 中的 new() 何时在堆栈或堆上分配

您如何确定 VBA 中的夏令时?

获取任何时区的 DST 开始和结束日期