2017-09-01 165 views
-1

我的Python代碼是如下:不受支持的操作數類型: 'datetime.timedelta' 和 'INT'

if (delta % 24 == 0): 
    print "ONE DAY " 

它給誤差類型錯誤:不支持的操作數類型(一個或多個)爲%: 'datetime.timedelta'和'int'

delta is of type datetime.timedelta 

請分享您的輸入,以解決此錯誤。 由於項目需求使用pyton 2.7

+1

你認爲'delta%24'做什麼?很明顯DateTimes不支持用整數模數。 – Carcigenicate

+1

是不是錯誤消息你需要的所有解釋? –

+0

@Carcigenicate我發現有一天結束使用模運算符 – Zaks

回答

3

DateTime不支持模數,因此您看到的錯誤。

這個Python modulo support for datetime雖然存在。


此外,你可以施放第二個操作數,從而使錯誤消失:

if ((d % timedelta(minutes = 24)) == 0): 
    print("ONE DAY") 

這在Python 3.6.1工作。

編輯:

這不會爲Python 2.7.0,其編輯爲OP的問題的工作。在這種情況下,這可能有所幫助:Manipulating DateTime and TimeDelta objects in python

+0

似乎是在python 3.6.0爲我工作,但只有當兩個操作數的類型是timedelta –

+0

嗯@ con--,它不適合我Python 3.6.1。感謝您的支持。嗯,這解釋了它,但這是一個*不同的情況,不是嗎? – gsamaras

+0

'>>> datetime.timedelta(seconds = 19)%datetime.timedelta(seconds = 5) datetime.timedelta(0,4)'就是我所得到的。我不認爲這將是一個過多的時間將他的參數投到timedelta –

0

如何閱讀文檔datetime.timedelta?或者甚至只是在python shell中測試它:

>>> d = datetime.timedelta(hours=24) 
>>> d 
datetime.timedelta(1) 
>>> dir(d) 
['__abs__', '__add__', '__class__', '__delattr__', '__div__', '__doc__', '__eq__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__mul__', '__ne__', '__neg__', '__new__', '__nonzero__', '__pos__', '__radd__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmul__', '__rsub__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 'days', 'max', 'microseconds', 'min', 'resolution', 'seconds', 'total_seconds'] 
>>> d.days 
1 
>>> d = datetime.timedelta(hours=8) 
>>> d.days 
0 

正如你所看到的,你已經掌握了這些信息。

請注意,如果您需要根據小時(而不是幾天)其他計算,您需要使用delta.seconds/(60 * 60) - 因爲某些原因我不明白,從來沒有人把添加hoursminutes屬性timedelta的照顧。 ..

相關問題