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

Python中datetime.time对象相加报TypeError的解决方法

报错原因

触发TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'的核心原因:

  • datetime.time是纯时刻类型,仅用于存储一天内的时分秒信息,本身没有定义算术运算逻辑,两个time对象直接相加不存在合法语义。
  • 原代码还存在两个会导致运行异常的问题:
    • 定义的函数名为calculateTime,调用时写成了calculateHour,会触发NameError
    • 时间偏移量不能用time类型表示,时间加减的增量需要用专门的datetime.timedelta类型。
修复方案

方案1:标准datetime运算(推荐)

将纯时刻和任意日期(比如当天)绑定为datetime.datetime对象,和timedelta完成加减运算后,再提取结果的time部分即可。这种方式会自动处理跨天进位,不需要手动编写取模逻辑。
修复后的完整代码:

import datetime

def calculateTime(a, b, c):
    base_time = datetime.time(a, b, c)
    print(f"原始时间:{base_time}")
    # 定义1小时的时间偏移量,使用timedelta类型
    offset = datetime.timedelta(hours=1)
    # 绑定当天日期生成可运算的datetime对象
    base_dt = datetime.datetime.combine(datetime.date.today(), base_time)
    new_dt = base_dt + offset
    # 提取计算后的时刻
    new_time = new_dt.time()
    print(f"偏移后时间:{new_time}")


h = int(input())
m = int(input())
s = int(input())
calculateTime(h, m, s)

如果需要调整偏移时长,直接给timedelta传对应参数即可,支持hours、minutes、seconds、days等多种时间单位。

方案2:秒数换算(轻量场景适用)

如果不需要处理复杂时间逻辑,可以把时分秒统一换算成当日总秒数,相加后对一天总秒数(86400)取模处理跨天,再转回时分秒格式,不需要依赖datetime的日期绑定逻辑:

def calculateTime(a, b, c):
    total_sec = a * 3600 + b * 60 + c
    # 累加1小时对应的秒数
    total_sec += 3600
    # 处理跨天场景
    total_sec %= 24 * 3600
    new_h = total_sec // 3600
    new_m = (total_sec % 3600) // 60
    new_s = total_sec % 60
    print(f"{new_h:02d}:{new_m:02d}:{new_s:02d}")


h = int(input())
m = int(input())
s = int(input())
calculateTime(h, m, s)

内容的提问来源于stack exchange,提问作者João Paulo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:48:19