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

如何在Pandas DataFrame中计算起止时间差并输出为HH:MM格式

时间差计算实现方案

实现逻辑

  • 将%d.%m.%Y格式的日期字符串解析为datetime.date类型
  • 通过datetime.datetime.combine()方法将拆分的日期、时间拼接为完整的 datetime 时间点
  • 计算结束时间与起始时间的差值得到 timedelta 对象
  • 对 timedelta 的总秒数做换算,格式化为HH:MM格式,不足两位自动补零

可运行代码

import datetime

# 输入数据
start_date  = ['29.12.2020', '29.12.2020', '30.12.2020', '30.12.2020', '30.12.2020']
start_time = [datetime.time(11, 10), datetime.time(23, 15), datetime.time(5, 15), datetime.time(11, 15), datetime.time(17, 15)]
end_date = ['29.12.2020', '30.12.2020', '30.12.2020', '30.12.2020', '30.12.2020']
end_time = [datetime.time(23, 15), datetime.time(5, 15), datetime.time(11, 15), datetime.time(17, 15), datetime.time(23, 15)]

time_diff_result = []
for sd, st, ed, et in zip(start_date, start_time, end_date, end_time):
    # 解析字符串日期为date类型
    start_date_obj = datetime.datetime.strptime(sd, "%d.%m.%Y").date()
    end_date_obj = datetime.datetime.strptime(ed, "%d.%m.%Y").date()
    # 拼接为完整时间点
    start_full = datetime.datetime.combine(start_date_obj, st)
    end_full = datetime.datetime.combine(end_date_obj, et)
    # 计算时间差并格式化
    delta = end_full - start_full
    total_sec = delta.total_seconds()
    h = int(total_sec // 3600)
    m = int((total_sec % 3600) // 60)
    time_diff_result.append(f"{h:02d}:{m:02d}")

# 输出结果
print(time_diff_result)

输出结果

['12:05', '06:00', '06:00', '06:00', '06:00']

其中第一个结果和给出的示例12:05完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:24:02