python 中时间对象之间的差异?
Difference between the time objects in python?
2个语句有什么区别:
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)),
)
我的模型:
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 小时
- datetime.now() 给定日期和时间信息。
- datetime.time() 只给出时间信息。
例如
>>> from datetime import *
>>> datetime.now()
datetime.datetime(2015, 1, 28, 12, 52, 35, 164500)
>>> datetime.time(datetime.now())
datetime.time(12, 52, 41, 97521)
>>>
一审:
datetime.datetime(2015, 1, 28, 12, 32, 9, 762118)
您有一个 日期时间 对象。它有日期(前三个数字)和时间(后四个数字)。
你提到的第二个对象:
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()
是构造方法,不是隐藏其他对象的方法
您也不能从 time
对象中减去 timedelta
:
要得到正确的结果,您需要从 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)
2个语句有什么区别:
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)),
)
我的模型:
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 小时
- datetime.now() 给定日期和时间信息。
- datetime.time() 只给出时间信息。
例如
>>> from datetime import *
>>> datetime.now()
datetime.datetime(2015, 1, 28, 12, 52, 35, 164500)
>>> datetime.time(datetime.now())
datetime.time(12, 52, 41, 97521)
>>>
一审:
datetime.datetime(2015, 1, 28, 12, 32, 9, 762118)
您有一个 日期时间 对象。它有日期(前三个数字)和时间(后四个数字)。
你提到的第二个对象:
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()
是构造方法,不是隐藏其他对象的方法
您也不能从 time
对象中减去 timedelta
:
要得到正确的结果,您需要从 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)