如果在Python中日期时间早于x个月,如何锻炼

时间:2014-06-25 16:25:00

标签: python django

我想知道过去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

2 个答案:

答案 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)
相关问题