如何判断一个日期时间是否超过x个月在Python中
我想知道某个条目在过去的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
3 个回答
1
你可以使用一个外部模块叫做 dateutil
:
from dateutil.relativedelta import relativedelta
def is_old(last_update):
time_threshold = date.today() - relativedelta(months=6)
return last_update < time_threshold
这是假设 last_update
的类型是一个 date
对象。
1
你的数据库字段 last_update
是一个日期时间类型的字段,而你却在用日期来比较它,这就是出错的原因。你应该用 datetime.datetime.now()
来代替 datetime.date.today()
。更好的做法是使用 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)
5
你需要使用 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