2017-09-01 18 views
-1

私のPythonのコードは以下の通りです:サポートされていないオペランドのタイプ(S): 'datetime.timedelta' と 'int型

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

それはTypeError例外としてエラーを与える:%のためのサポートされていないオペランドのタイプ(複数可): 「datetime.timedelta」と「int」

delta is of type datetime.timedelta 

このエラーを修正するために入力を共有してください。 プロジェクト要件のためにピルトン2.7を使用する

+1

「デルタ%24」は何を期待していますか?明らかに、DateTimesは整数でモジュロをサポートしていません。 – Carcigenicate

+1

エラーメッセージがすべて必要な説明ではありませんか? –

+0

@Carcigenicate私はモジュロ演算子を使用して1日の終わりを見つけています – Zaks

答えて

3

DateTimeはモジュロをサポートしていないため、表示されるエラーが発生します。

これはPython modulo support for datetimeですが、


エラーが消えるように、また、あなたは、第二オペランドをキャストできます。Pythonの3.6.1で動作

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

EDIT:

これはOPの質問に編集されたのPython 2.7.0、動作しません。その場合は、これが役に立ちます:Manipulating DateTime and TimeDelta objects in python

+0

Python 3.6.0で私のために働いているようですが、両方のオペランドがtimedeltaタイプの場合にのみ –

+0

Hmm @ con--、それは私のためではありませんPython 3.6.1。 upvoteありがとう。ああ、それはそれを説明しますが、それは*別のケースですね。 – gsamaras

+0

「>>> datetime.timedelta(秒= 19)%datetime.timedelta(秒= 5) datetime.timedelta(0、4) 'は私が得ているものです。私はそれが両方の引数をtimedeltaに投げ込むのは余りにも難しいとは思わない。 –

0

datetime.timedeltaのドキュメントはどうなりますか?あるいは、あなたのpythonシェルでテストするだけでも:

>>> 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 

ご覧のとおり、手元にある情報はすでにあります。私は誰もtimedeltahoursまたはminutes属性を追加するの世話をしたん理解することはできませんいくつかの理由のために - あなたは時間(ない日)に基づく他の計算を必要とする場合、あなたはdelta.seconds/(60 * 60)を使用する必要がありますことを

は注意してください。 ..

関連する問題