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

Python计算两个Datetime差值并转为HH:MM:SS格式(跨天转小时)

解决Pandas中跨天时间差转HH:MM:SS格式的问题

当你用df['trip_duration'] = df['ended_at'] - df['started_at']生成时间差列后,默认的timedelta字符串会包含天数(比如1 days 12:00:00),要实现将天数转成小时累加并输出HH:MM:SS格式,可通过以下步骤处理:

步骤1:确保时间列是datetime类型(如未转换)

如果你的started_at和ended_at还不是datetime格式,先执行转换:

import pandas as pd

df['started_at'] = pd.to_datetime(df['started_at'])
df['ended_at'] = pd.to_datetime(df['ended_at'])

步骤2:计算原始时间差

生成timedelta类型的差值列:

df['trip_duration'] = df['ended_at'] - df['started_at']

步骤3:自定义函数格式化时间差

编写函数将timedelta转换为目标格式,核心是通过总秒数计算小时、分钟、秒,自动处理跨天场景:

def format_timedelta(td):
    total_sec = int(td.total_seconds())
    hours = total_sec // 3600
    rem_sec = total_sec % 3600
    mins = rem_sec // 60
    secs = rem_sec % 60
    return f"{hours:02d}:{mins:02d}:{secs:02d}"

# 应用函数生成格式化后的列
df['formatted_duration'] = df['trip_duration'].apply(format_timedelta)

示例验证

针对你提到的跨天场景:

起始时间:2022-10-10 14:21:58+00:00
结束时间:2022-10-11 02:21:58+00:00

原始时间差为1 days 12:00:00,经过格式化后输出36:00:00,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:01:05