python中时间对象的区别?

时间:2015-01-28 07:14:21

标签: python django datetime

两个陈述之间有什么区别:

import datetime
print datetime.datetime.now()
  
    

datetime.datetime(2015,1,28,12,32,9,762118)

  
from datetime import *
>> datetime.time(datetime.now())

datetime.time(12,33,3,693084)

实际上我想将django模型的TimeField与当前时间减少1小时的时间进行比较。我的代码片段相同:

Mymodel.objects.filter(
            follow_up_date=datetime.datetime.now().date,
            # commented now  
            # preferred_time__lt=(
            #     datetime.datetime.now() - datetime.timedelta(hours=1)),
            preferred_time__lt=(datetime.time(datetime.now()) - datetime.timedelta(hours=1)),
            )

为MyModel:

class Mymodel(models.Model):
  follow_up_date = models.DateField("Follow up Date",null=True,blank=True)
  preferred_time = models.TimeField(_("Preferred time"),default=now,
                                      null=True,blank=True)

我正在尝试提取当天安排的所有实例,其首选时间仅在1小时后消失。哪个应该是' preferred_time'的正确过滤器?我得到了注释代码的错误结果。我不清楚。

这是一项cron工作,即在django每1小时运行一次管理命令

2 个答案:

答案 0 :(得分:2)

首先:

datetime.datetime(2015, 1, 28, 12, 32, 9, 762118)

您有 datetime 对象。它有日期(前三个数字)和时间(后四个数字)。

你提到的第二个对象:

datetime.time(12, 33, 3, 693084)

这只是时间部分。

要比较TimeField,您只需要时间组件;对于DateField,只是日期组件。

在您的代码中,您有以下datetime.datetime.now().date这只是内置函数date的名称。你需要打电话给它:

>>> datetime.datetime.now().date
<built-in method date of datetime.datetime object at 0xb74ac9b0>
>>> datetime.datetime.now().date()
datetime.date(2015, 1, 28)

你也做不到datetime.time(datetime.datetime.now())datetime.time()是构造函数方法,它不是一种隐藏其他对象的方法。

您也无法从timedelta对象中减去time

要获得正确的结果,您需要从datetime对象中减去一个小时,然后将其转换为时间:

>>> (datetime.datetime.now() - datetime.timedelta(hours=1)).time()
datetime.time(9, 27, 16, 93746)

最后,您的过滤器将如下所示:

filter_date = datetime.datetime.now().date()
filter_time = (datetime.datetime.now() - datetime.timedelta(hours=1)).time()

Mymodel.objects.filter(follow_up_date=filter_date,
                       preferred_time__lt=filter_time)

答案 1 :(得分:0)

  1. datetime.now()给出日期和时间信息。
  2. datetime.time()仅提供时间信息。
  3. e.g

    >>> from datetime import *
    >>> datetime.now()
    datetime.datetime(2015, 1, 28, 12, 52, 35, 164500)
    >>> datetime.time(datetime.now())
    datetime.time(12, 52, 41, 97521)
    >>>