如何检查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
相关产品推荐
相关产品推荐

