我想在2个日期之间建立一个范围,并且我的范围字段有时间
damage_list = Damage.objects.filter(entry_date__range=(fdate, tdate))
fdate和tdate是日期('YYYY-mm-dd'),entry_date有时间。 如何排列tdate的所有记录?
预先感谢
科斯塔斯
答案 0 :(得分:2)
如果只想考虑 date 部分,则可以使用__date
查找:
damage_list = Damage.objects.filter(entry_date__date__range=(fdate, tdate))
这将导致如下查询:
SELECT damage.*
FROM damage
WHERE DATE(CONVERT_TZ(`entry_date`, 'UTC', 'UTC'))
BETWEEN 2018-01-01 AND 2018-07-01
或者如果我们不使用时区(设置中为USE_TZ = False
)
SELECT damage.*
FROM damage
WHERE DATE(`entry_date`, 'UTC', 'UTC') BETWEEN 2018-01-01 AND 2018-07-01
此处2018-01-01
和2018-07-01
是示例fdate
和tdate
。
请注意,在时区的情况下,故事甚至可能变得更加复杂,因为本地日期和UTC日期之间可能会有差异。
答案 1 :(得分:1)
您可以使用fdate
向tdate
和datetime.datetime.combine
添加时间:
>>> from datetime import datetime, date
>>> datetime.combine(date.today(), datetime.min.time())
datetime.datetime(2018, 7, 30, 0, 0)
>>> datetime.combine(date.today(), datetime.max.time())
datetime.datetime(2018, 7, 30, 23, 59, 59, 999999)
将最小时间应用于fdate
,并将最大时间应用于tdate
,将确保该时间适合这些边界。