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

如何使用Python处理大于24小时的时长格式,解决datetime.time()报错问题

解决方案

datetime.time 是Python中用于表示一天内的具体时间点的对象,设计上就不支持小时数≥24的取值,因此不适合用来存储、计算时长类数据。你需要改用专门表示时间间隔的 datetime.timedelta 类型处理你的实验时长数据。

具体实现步骤

  • 第一步:将HH:MM:SS格式的时长字符串解析为timedelta对象
    先定义解析函数,处理任意小时数的时长字符串:

    from datetime import timedelta
    
    def parse_duration(duration_str: str) -> timedelta:
        h, m, s = map(int, duration_str.split(":"))
        return timedelta(hours=h, minutes=m, seconds=s)
    

    测试你的示例数据:

    raw_durations = ["23:24:44", "25:10:44"]
    parsed_durations = [parse_duration(item) for item in raw_durations]
    # 解析结果:[datetime.timedelta(seconds=84284), datetime.timedelta(days=1, seconds=4244)]
    
  • 第二步:直接使用timedelta做时长运算
    timedelta原生支持加减、求和、大小比较等各类时长操作:

    # 计算总时长
    total = sum(parsed_durations, timedelta())
    # 结果:datetime.timedelta(days=2, seconds=2128)
    
    # 计算两个时长的差值
    diff = parsed_durations[1] - parsed_durations[0]
    # 结果:datetime.timedelta(seconds=6360)
    
    # 时长大小比较
    is_longer = parsed_durations[1] > parsed_durations[0]
    # 结果:True
    
  • 第三步:将运算后的timedelta转回HH:MM:SS格式
    因为timedelta默认输出会带days标识,你可以自定义转换函数输出你需要的纯小时格式:

    def format_duration(td: timedelta) -> str:
        total_sec = int(td.total_seconds())
        hours = total_sec // 3600
        minutes = (total_sec % 3600) // 60
        seconds = total_sec % 60
        return f"{hours}:{minutes:02d}:{seconds:02d}"
    
    print(format_duration(total)) # 输出:48:35:28
    print(format_duration(diff)) # 输出:1:46:00
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:39:03