2013-04-08 131 views
1

我有以下錯誤,請問有人可以解釋datetime.datetime和datetime.date之間的區別嗎?Python的日期時間操作

 
TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date' 
+0

這是哪一種語言? – 2013-04-08 17:58:31

+0

對不起編輯,python,我從文檔中獲得了兩個ojects的定義,但仍然在努力理解diff,這只是秒?我怎麼能轉換其中一個具有相同的格式? – matel 2013-04-08 18:00:40

+1

輸入'help(datetime.datetime)'和'help(datetime.date)' – jurgenreza 2013-04-08 18:04:44

回答

2

顧名思義,一個datetime包括有關在日期和時間信息,而date只是一個日期。這就是爲什麼減去兩個日期時間是允許的並且返回timedelta(兩個時刻之間的時間差),但是減去datetimedate不是 - 因爲date是指一整天,所以不清楚你想要的那一天的哪一部分計算到的距離。

要修正錯誤,您必須指定您指向的日期中的哪個點。例如,要使其指向日期開始的午夜,請將dt - d替換爲dt - datetime.datetime(d.year, d.month, d.day)

1

date只是日期(年,月,日),而datetime還包括時間(年,月,日,時,分,秒,毫秒)。

您不能直接比較兩者,因爲您需要明確指定如何處理時間部分。你完全忽略了時間部分,還是選擇了一些隨意的時間與必要時(通常是午夜)進行比較?這種選擇取決於哪種方法最適合您的情況,而且只有您可以確定。

更具體地說,您必須將date升至datetime,或將datetime降級爲date。假定日期時間爲dt,日期爲d,後者更容易一些(通常更有意義 - 您可以撥打dt.date()),但前者也不難(datetime.datetime(d.year, d.month, d.day))。

在您的代碼中,它將看起來像dt.date() - ddt - datetime.datetime(d.year, d.month, d.day)

注意,這將返回一個datetime.timedelta對象,這是另一個略有不同的動物 - 它不代表特定的時間點,只是兩點之間的差異(即,您不能將其用作日期日期)。