2010-01-16 119 views
3

为什么不能减去两个时间对象?例如,12:00 - 11:00 = 1:00Missing datetime.time .__ sub__?

 

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' 

你知道为什么吗?

+0

你想要的结果可能是一个疏忽,或可得太多 - 笔者在此情况下,它是暧昧去”,所以我们不应该实现它完全“,而不是简单地明确*定义案件。除了设计师之外,除了猜测真正的基本原理之外,没有人能做到,但我同意这是一个明显缺失的操作。无论如何,Python中的日期时间模块比这更多的错误(时区的东西超出了braindamaged)... – 2010-01-16 23:47:24

回答

6

time对象没有日期,因此,例如,所述12:00可能是(比方说)在星期三和前星期二上11:00,使得差25小时,而不是一个(可能被添加的24任何倍数或扣除)。如果你知道它们实际上是在同一天,那么只要对它们中的每一个应用任意日期(制作两个datetime对象)和然后就可以将它们减去。例如:

import datetime 

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

是的,这是一个骗局......但我仍然理解为什么

__sub__
没有实现:它是显而易见的这两次指的是同一天,否则我应该使用datetime.datetime。 例如数据表软件可以做到这一点(excel) – 2010-01-16 23:39:20

+1

对你来说也许很明显,但不是每个人。现在不支持它更容易,将来也不会支持它,现在也不必忍受可能的糟糕选择。 – 2010-01-16 23:52:06

+0

这与您如何不能使用datetime.timedelta()对象修改datetime.time()对象有关。正如Alex所说,没有日期组件意味着你不知道他们是否在同一天。同样,如果您添加/减去timedelta,它可能会将时间推到另一天(溢出),并且无法知道这一点。 – 2010-01-17 00:01:39

0

你可以通过

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

好的,当然,但我想了解为什么__sub__方法没有实现 – 2010-01-16 23:34:49