如何将夏令时(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
相关产品推荐
相关产品推荐

