[英]Difference between the time objects in python?
What is the difference between the 2 statements: 这两个语句之间有什么区别:
import datetime
print datetime.datetime.now()
datetime.datetime(2015, 1, 28, 12, 32, 9, 762118)
datetime.datetime(2015、1、28、12、32、9、762118)
from datetime import *
>> datetime.time(datetime.now())
datetime.time(12, 33, 3, 693084) datetime.time(12,33,3,693084)
Actually I want to compare TimeField of a django model with the current day's 1 hour less time. 实际上,我想将Django模型的TimeField与当天少1小时的时间进行比较。 My code snippet for the same:
我的代码段相同:
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)
I am trying to extract all the instances which are scheduled for the day, whose preferred time has elapsed just 1 hour back. 我正在尝试提取当天计划的所有实例,它们的首选时间已经过去了1个小时。 Which should be the correct filter for the 'preferred_time'?
哪个是“ preferred_time”的正确过滤器? I got wrong results for the commented code.
对于注释的代码,我得到了错误的结果。 I am not clear.
我不清楚。
This is a cron job ie management command to be run every 1 hour in django 这是一项cron作业,即在django中每1小时运行一次管理命令
In the first instance: 第一个例子:
datetime.datetime(2015, 1, 28, 12, 32, 9, 762118)
You have a datetime object. 您有一个日期时间对象。 It has both the date (first three numbers) and the time (last four numbers).
它同时具有日期(前三个数字)和时间(后四个数字)。
The second object you mention: 您提到的第二个对象:
datetime.time(12, 33, 3, 693084)
This is just the time component. 这只是时间成分。
To compare a TimeField
, you need just the time component; 要比较
TimeField
,您只需要时间部分; for a DateField
, just the date component. 对于
DateField
,只是日期组件。
In your code, you have the following datetime.datetime.now().date
this is just the name of the built-in function date
. 在您的代码中,您具有以下
datetime.datetime.now().date
这只是内置函数date
。 You need to call it: 您需要调用它:
>>> datetime.datetime.now().date
<built-in method date of datetime.datetime object at 0xb74ac9b0>
>>> datetime.datetime.now().date()
datetime.date(2015, 1, 28)
You also cannot do datetime.time(datetime.datetime.now())
, datetime.time()
is a constructor method, it is not a way to covert other objects. 您也不能执行
datetime.time(datetime.datetime.now())
, datetime.time()
是构造函数方法,它不是隐藏其他对象的方法。
You also cannot subtract timedelta
from a time
object: 您也不能从
time
对象中减去timedelta
:
To get the correct result, you need to subtract one hour from the datetime object, then convert it to time: 为了获得正确的结果,您需要从datetime对象减去一小时,然后将其转换为时间:
>>> (datetime.datetime.now() - datetime.timedelta(hours=1)).time()
datetime.time(9, 27, 16, 93746)
In the end, your filter would look like: 最后,您的过滤器将如下所示:
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)
eg 例如
>>> from datetime import *
>>> datetime.now()
datetime.datetime(2015, 1, 28, 12, 52, 35, 164500)
>>> datetime.time(datetime.now())
datetime.time(12, 52, 41, 97521)
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.