缺失 datetime.time.__sub__?

3 投票
2 回答
1380 浏览
提问于 2025-04-15 18:06

为什么不能直接把两个时间对象相减呢?比如说,12:00 - 11:00 = 1:00。


from datetime import time
time(12,00) - time(11,00) # -> timedelta(hours=1)

看起来 datetime.time.__sub__ 这个功能是缺失的。

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

你知道为什么吗?

2 个回答

0

你可以通过以下方式获得你想要的结果:

t1 = time(12, 0)
t2 = time(11, 0)
td = timedelta(hours=t1.hour-t2.hour, minutes=t1.minute-t2.minute)
6

time对象只有时间,没有日期。比如说,12:00可能是在星期三,而11:00是在前一天的星期二,这样算出来的时间差就是25小时,而不是1小时(你可以加或减任意多个24小时)。如果你知道这两个时间其实是在同一天,那就给它们各自加上一个随便的日期(这样就变成两个datetime对象),然后你就可以计算它们之间的差了。例如:

import datetime

def timediff(t1, t2):
  td = datetime.date.today()
  return datetime.datetime.combine(td, t1) - datetime.datetime.combine(td, t2)

撰写回答