2010-01-16 113 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