You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查datetime值是否有效且未落入DST变更引发的时间间隙?

夏令时时间有效性检测问题

夏令时(Daylight Saving Time,DST)通常每年变更两次:

  • 秋季调慢时钟会产生时间重叠,即某个本地时间对应两个实际时间,这在PEP-495中有相关说明
  • 春季调快时钟会导致本地时间出现间隙,时长通常为1小时

例如在Europe/London时区,2023年3月26日夏令时变更前后的有效时间序列为:00:58、00:59、02:00、02:01;而01:00至01:59的时间完全不存在。

示例

以下是有效(存在)和无效(不存在)的时间戳示例:

import datetime as dt 
from zoneinfo import ZoneInfo 

timestamp_possible = dt.datetime.strptime(
        "2023-03-26 00:30:00", "%Y-%m-%d %H:%M:%S"
    ).replace(tzinfo=ZoneInfo("Europe/London"))

timestamp_impossible = dt.datetime.strptime(
        "2023-03-26 01:30:00", "%Y-%m-%d %H:%M:%S"
    ).replace(tzinfo=ZoneInfo("Europe/London"))

我试过用pandas.to_datetime实现检测,但不确定这个逻辑是pandas的稳定行为还是仅为实现细节(可能后续变更):

import pandas as pd

def is_valid(timestamp):
    return pd.to_datetime(timestamp).to_pydatetime() == timestamp

执行结果:

>>> is_valid(timestamp_possible)
True
>>> is_valid(timestamp_impossible)
False

问题

检测给定的datetime.datetime对象是否有效(未落入夏令时导致的时间间隙)的最简方法是什么?能否仅通过Python标准库实现?

内容的提问来源于stack exchange,提问作者Niko Fohr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:23