Python 如何比较时区和日期时间的实例
我在django中创建了一个todo模型,使用了一种清除旧todo的方法,该方法应该可以删除24小时前发布的todo。在我的if条件下,我似乎无法比较datetime和timezone实例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
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'