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

how can i compare instances of timezone and datetime

我在 Django 中创建了一个待办事项模型,使用清除旧待办事项的方法应该删除超过 24 小时前发布的待办事项,我似乎无法比较我的日期时间和时区实例如果条件

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"
>>> Todo.clear_old_todo("self")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "E:\projectsstDjangoApp\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'

datetime 中减去 datetime 得到 timedelta,两者之间的差值。从 datetime 中减去 timedelta 得到一个 datetime,一个与第一个时间戳不同的新时间戳 timedelta.

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

中减去 timedelta

要么想要timezone.now() - todo.pub_date产生一个timedelta并检查timedelta是否是>/< 一些特定的值(即比较两个 timedeltas), 你想做 timezone.now() - time_limit 来产生一个 datetime 过去并检查是否 >/< 你的 todo.pub_date datetime.