首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的时间对象之间的差异?

问python中的时间对象之间的差异?
EN

Stack Overflow用户
提问于 2015-01-28 07:14:20
回答 2查看 749关注 0票数 0

这两项声明之间有什么区别:

代码语言:javascript
复制
import datetime
print datetime.datetime.now()

Datetime.datetime(2015年、1、28、12、32、9、762118)

代码语言:javascript
复制
from datetime import *
>> datetime.time(datetime.now())

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

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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小时前已经过去。哪个应该是“首选时间”的正确过滤器?我的注释代码得到了错误的结果。我不太清楚。

这是一个cron作业,即在django中每1小时运行一次的管理命令

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-28 07:26:34

首先:

代码语言:javascript
复制
datetime.datetime(2015, 1, 28, 12, 32, 9, 762118)

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

你提到的第二个目标是:

代码语言:javascript
复制
datetime.time(12, 33, 3, 693084)

这只是时间的一部分。

要比较TimeField,只需要时间组件;对于DateField,只需要date组件。

在您的代码中,您有以下datetime.datetime.now().date --这只是内置函数date的名称。你得叫它:

代码语言:javascript
复制
>>> 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对象中减去一个小时,然后将其转换为time:

代码语言:javascript
复制
>>> (datetime.datetime.now() - datetime.timedelta(hours=1)).time()
datetime.time(9, 27, 16, 93746)

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

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2015-01-28 07:22:32

  1. datetime.now()给定的日期和时间信息。
  2. datetime.time()只提供时间信息。

e.g

代码语言:javascript
复制
>>> from datetime import *
>>> datetime.now()
datetime.datetime(2015, 1, 28, 12, 52, 35, 164500)
>>> datetime.time(datetime.now())
datetime.time(12, 52, 41, 97521)
>>> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28186611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档