我想知道过去6个月内是否有条目更新。
这就是我的尝试:
def is_old(self):
"""
Is older than 6 months (since last update)
"""
time_threshold = datetime.date.today() - datetime.timedelta(6*365/12)
if self.last_update < time_threshold:
return False
return True
但我得到错误:
if self.last_update < time_threshold:
TypeError: can't compare datetime.datetime to datetime.date
答案 0 :(得分:4)
您需要days
关键字
>>> import datetime
>>> datetime.date.today() - datetime.timedelta(days=30)
datetime.date(2014, 5, 26)
>>> datetime.date.today() - datetime.timedelta(days=180)
datetime.date(2013, 12, 27)
>>> datetime.date.today() - datetime.timedelta(days=6*365/12)
datetime.date(2013, 12, 25)
另外,出现实际错误:TypeError: can't compare datetime.datetime to datetime.date
你可以做到
def is_old(self):
time_threshold = datetime.date.today() - datetime.timedelta(days=6*365/12)
#The following code can be simplified, i shall let you figure that out yourself.
if self.last_update and self.last_update.date() < time_threshold:
return False
return True
答案 1 :(得分:1)
您的数据库字段last_update
是日期时间字段,您要将其与日期进行比较,因此会出现错误,而不是datetime.date.today()
使用datetime.datetime.now()
。更好地使用django.utils.timezone
,这将尊重设置中的TIME_ZONE
:
from django.utils import timezone
def is_old(self):
"""
Is older than 6 months (since last update)
"""
time_threshold = timezone.now() - datetime.timedelta(6*365/12)
return bool(self.last_update > time_threshold)