簡體   English   中英

無法將 datetime.datetime 與 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM