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

如何将夏令时(DST)25小时数据转换为datetime类型?

解决夏令时25小时日期转换问题

问题根源

直接用range(25)循环指定小时数时,会出现hour=24的情况,而Python的datetime对象小时范围只能是0-23,所以触发报错。哥本哈根时区在结束夏令时的当天(10月最后一个周日),时钟会从2点倒回1点,导致当天实际有25个小时,其中1点到2点的时间段会重复一次。

正确实现方法

别直接循环指定小时,改成从当天0点开始逐次累加1小时,让pytz自动处理夏令时的时间重复:

import pytz
import datetime as dt
import pandas as pd

# 设定时区和目标日期(示例为2024年哥本哈根结束夏令时的日期)
cph_tz = pytz.timezone("Europe/Copenhagen")
target_day = dt.date(year=2024, month=10, day=27)

# 初始化当天0点的时区感知时间
current_dt = cph_tz.localize(dt.datetime.combine(target_day, dt.time(0, 0, 0)))
time_list = []

# 循环25次,每次加1小时
for _ in range(25):
    time_list.append(current_dt)
    current_dt += dt.timedelta(hours=1)

# 替换DataFrame索引
df.index = pd.DatetimeIndex(time_list)

效果验证

生成的时间序列会包含两个不同时区偏移的1点:2024-10-27 01:00:00+02:00(夏令时)和2024-10-27 01:00:00+01:00(冬令时),刚好对应当天的25个小时,完美匹配你的数据量。

补充提示

如果是进入夏令时的日期(3月最后一个周日),当天只有23小时,只需把循环次数改成23次即可,时区会自动跳过被跳过的那一小时,不会生成无效时间。

内容的提问来源于stack exchange,提问作者Denver Dang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:36:01