2011-08-30 14 views
36

次のコードがあり、上記のエラーが発生しています。私はここの構文を理解するトラブルを抱えていると私はエラーを修正することができますどのようにPythonのために新たなんだので:datetime.datetimeとdatetime.dateを比較できません

if not start or date < start: start = date 
+0

関連するデータ型がわかるように、コードをいくつか追加してください。ほとんどの場合、比較の前にdatetime.dateをdatetime.datetimeに変換する必要があります。 – Ber

+1

[Pythonでの日付の比較]の可能な複製(http://stackoverflow.com/questions/3278999/comparing-dates-in-python) – NullUserException

+0

ここでの構文は何ですか?どのようにdatetime.datetimeをdatetime.dateに変換するのですか? – locoboy

答えて

47

datetimeからdateに変換する方法はdatetime.date()です。逆の変換を行うには

、あなたはその後、他のdatetimeオブジェクトに変換されたオブジェクトを比較し、DateTimeオブジェクトに日付オブジェクトを比較するdatetime.datetime.combineメソッドを使用することができますdatetime.datetime(d.year, d.month, d.day)

+16

反対の変換を行うには、 'datetime.datetime(d.year、d.month、d。' – Steven

1

はあなたの変数は、開始の日付と私は推測異なるタイプのものです。 1つは日時で、もう1つは日付です。あなたはまともなヘルプを得るために、より多くのコードを表示する必要があります。

しかし、これを見て:http://docs.python.org/library/datetime.html#available-types

それはdatetime.datetimeのがちょうどdatetime.dateのように、日、月、年などの属性を持っていることを示しています。

8

この機能を使用することができます。開始を想定し

import datetime 

dt1 = datetime.datetime(2011, 03, 03, 11, 12) 
day = datetime.date(2011, 03, 02) 
dt2 = datetime.datetime.combine(day, datetime.time(0, 0)) 

print dt1 > dt2 
3

はこのようにそれを使用して、日付時刻です:

if not start or date < start.date(): start = date 

あなただけ行うことができますように私は、Pythonで日時に日付を変換する必要があるとは思わない反対と比較する。

その他の方法では、変換する日付と00:00の時刻を使用して、新しいdatetimeを作成することもできます。

+0

' DateField'を 'datetime.now()'と比較するのと同じエラーが発生しました。単に '.date()'を最後に追加することで修正しました: 'datetime.now()。date () 'これは非常に良い、過度の複雑な解決策ではありません。 – Catherine

1

この問題は、日付フィールド(DateField)と日付時刻フィールド(DateTimeField)を比較しようとしているときに発生します。

解決策は、モデルのフィールドを定義した場所を確認し、型が均一であることを確認します。

はすべてDateFieldDateTimeFieldに置き換えてください。

+0

私はそれに関連した問題を抱えています。私はDateTimeFieldに変更しました。私が見つけたのは、オブジェクトを作成していたとき、私はDateを使用していました。代わりにDateTime – anizzomc

2

あなたはの元yearmonthday属性を使用して、後者を構築することにより、datetime.datetimedatetime.dateを変換することができます:

from datetime import datetime, day 

d = day(2000, 12, 31) 
dt = datetime(d.year, d.month, d.day) 

おかげStevenを解決するために。

関連する問題