在Django中比较日期和日期时间 [英] Compare date and datetime in Django

查看:632
本文介绍了在Django中比较日期和日期时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有日期时间字段的模型:

I have a model with a datetime field:

class MyModel(models.Model):
    created = models.DateTimeField(auto_now = True)

我想获取今天创建的所有记录。

I want to get all the records created today.

我尝试过:

MyModel.objects.all().filter(created = timezone.now())

MyModel.objects.all().filter(created = timezone.now().date())

但总是有一个空集。 Django中执行此操作的正确方法是什么?

But always got an empty set. What is the correct way in Django to do this?

编辑:

看起来很奇怪,但今天创建的记录(06.04.2012 23:09:44)在数据库中具有日期(2012-04-07 04:09:44)。当我尝试在管理面板中对其进行编辑时,它看起来是正确的(06.04.2012 23:09:44)。 Django会以某种方式处理它吗?

It looks strange, but a record, created today (06.04.2012 23:09:44) has date (2012-04-07 04:09:44) in the database. When I'm trying to edit it in the admin panel it looks correct (06.04.2012 23:09:44). Does Django handle it somehow?

推荐答案

也许有一个更合适的解决方案,但是快速检查表明这可以解决问题: / p>

There may be a more proper solution, but a quick workup suggests that this would work:

from datetime import timedelta

start_date = timezone.now().date()
end_date = start_date + timedelta( days=1 ) 
Entry.objects.filter(created__range=(start_date, end_date))

我假设时区是一个类似日期时间的对象。

I'm assuming timezone is a datetime-like object.

重要的是,您要存储一个精确的时间,直到毫秒,您正在将其与仅能精确到一天的东西进行比较。 django / python不会将小时,分钟和秒扔掉,而是将它们默认为0。因此,如果您的记录创建于2011-4-6T06:34:14am,那么它将比较2011-4-6T:06:34:14am到2011-4-6T00:00:00,而不是2011-4-6(从创建日期开始)到2011-4-6(从timezone.now()。date()开始)。有帮助吗?

The important thing is that you're storing an exact time, down to the millisecond, and you're comparing it to something that only has accuracy to the day. Rather than toss the hours, minutes, and seconds, django/python defaults them to 0. So if your record is createed at 2011-4-6T06:34:14am, then it compares 2011-4-6T:06:34:14am to 2011-4-6T00:00:00, not 2011-4-6 (from created date) to 2011-4-6 ( from timezone.now().date() ). Helpful?

这篇关于在Django中比较日期和日期时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆