Python 如何比较时区和日期时间的实例

Python 如何比较时区和日期时间的实例,python,datetime,django-3.0,Python,Datetime,Django 3.0,我在django中创建了一个todo模型,使用了一种清除旧todo的方法,该方法应该可以删除24小时前发布的todo。在我的if条件下,我似乎无法比较datetime和timezone实例 class Todo(models.Model): description = models.CharField(max_length=200) Todo_date = models.DateTimeField('Todo Date') pub_date = models.DateTi

我在django中创建了一个todo模型,使用了一种清除旧todo的方法,该方法应该可以删除24小时前发布的todo。在我的if条件下,我似乎无法比较datetime和timezone实例

class Todo(models.Model):
    description = models.CharField(max_length=200)
    Todo_date = models.DateTimeField('Todo Date')
    pub_date = models.DateTimeField('Date Published')

    def __str__(self):
        return self.description

    def create_todo(self, description, Todo_date, pub_date):
        todo = Todo(description=description,
                    Todo_date=Todo_date, pub_date=pub_date)
        todo.save()
        return todo

    def delete_todo(self, description):
        todo = Todo.objects.get(description=description)
        todo.delete()
        return "Todo removed"

    def clear_old_todo(self):
        todos = Todo.objects.all()
        time_limit = datetime.timedelta(hours=24)
        for todo in todos:
            if (timezone.now()-todo.pub_date) > (timezone.now()-time_limit):
                todo.delete()
                return "old todo cleared"
待办事项。清除旧的待办事项(“自我”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“E:\projects\1stDjangoApp\ToDoList\ToDo\models.py”,第36行,在clear\u old\u ToDo中 如果(timezone.now()-todo.pub_date)>(timezone.now()-time_limit): TypeError:“datetime.timedelta”和“datetime.datetime”的实例之间不支持“>”
日期时间
中减去
日期时间
会得到一个
时间增量
,即两个时间之间的差值。从
datetime
中减去
timedelta
将得到一个
datetime
,一个与第一个时间戳不同的新时间戳,其大小为
timedelta

timezone.now()-todo.pub_date
中,要减去两个
datetime

timezone.now()-time\u limit
中,从
datetime
中减去
timedelta


您可以使用
timezone.now()-todo.pub_date
生成
timedelta
,并检查
timedelta
是否为
/
对某个特定值进行编码(即比较两个codetimedelta/code),或者/em您想要执行codetimezone.now()-time\u limit/code生成过去的codedatetime/code并检查是否为code>/
时区。now()-todo.pub\u date
创建一个时间差,即两个时间之间的差
timezone.now()-time\u limit
创建日期时间,因为您要从
datetime
中减去
timedelta
。你可能只是想要
timezone.now()-time\u limit>todo.pub\u date
?谢谢你的帮助,以我的方式,我确信我不会再犯同样的错误了。干杯,伙计
>>> Todo.clear_old_todo("self")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "E:\projects\1stDjangoApp\ToDoList\ToDo\models.py", line 36, in clear_old_todo
    if (timezone.now()-todo.pub_date) > (timezone.now()-time_limit):
TypeError: '>' not supported between instances of 'datetime.timedelta' and 'datetime.datetime'