[英]Django: can't compare datetime.datetime to datetime.date
[英]can't compare datetime.datetime to datetime.date
我有以下代碼並收到上述錯誤。 由於我是 python 的新手,因此無法理解此處的語法以及如何修復錯誤:
if not start or date < start: start = date
有一個datetime.date()
方法可以將日期時間轉換為日期。
要進行相反的轉換,您可以使用此函數datetime.datetime(d.year, d.month, d.day)
您可以使用datetime.datetime.combine
方法將日期對象與日期時間對象進行比較,然后將轉換后的對象與其他日期時間對象進行比較。
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
假設開始是一個日期時間,像這樣使用它:
if not start or date < start.date(): start = date
我認為不需要在 python 中將日期轉換為日期時間,因為您可以做相反的事情並進行比較。
或者,您還有其他方法可以通過使用要轉換的日期和 00:00 的時間來創建新的日期時間。
但是,我在使用pandas
時收到了上述錯誤,因為date_column
是我浪費了很多時間而沒有意識到我格式化錯誤的字符串:
# didnt work
df[(df.date_column > parse_datestr('2018-01-01'))]
# works
df['date_column'] = pd.to_datetime(df['date_column'])
df[(df.date_column > '2018-01-01') & (df.date_column < '2018-02-28')]
當您嘗試比較日期字段 ( DateField
) 和日期時間字段 ( DateTimeField
) 時,會出現此問題。
解決方案是檢查您在模型中定義字段的位置並確保類型是統一的。
我建議你用DateTimeField
替換所有DateField
。
我猜你的變量 start 和 date 是不同的類型。 一個是日期時間,一個是日期。 您可能需要顯示更多代碼才能獲得體面的幫助。
但看看這個: http : //docs.python.org/library/datetime.html#available-types
它告訴您 datetime.datetime 具有諸如日、月和年之類的屬性,就像 datetime.date 一樣。
哇,問題和答案太舊了,需要更新。 將 datetime.datetime 對象轉換為 datetime.date 對象很簡單:
somestringtext = '7.04.2021'
datetime_datetime_object = datetime.strptime(somestringtext, '%d.%m.%Y')
### returns datetime.datetime(2021, 4, 7, 0, 0)
datetime_date_object = datetime.date(datetime_datetime_object)
而且 datetime 對象與 date 對象不同,您無法比較
datetime_datetime_object == datetime_date_object
### returns False
除非您將它們轉換為相同的格式:
datetime.date(datetime_datetime_object) == datetime_date_object
### returns True
我使用日期時間 object 解決了它。 方法如下:
date_object = datetime_object.date()
然后您可以將其與任何 datetime.date object 進行比較。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.