Python:范围字段中有时间的日期之间的范围

时间:2018-07-30 12:20:44

标签: python django

我想在2个日期之间建立一个范围,并且我的范围字段有时间

damage_list = Damage.objects.filter(entry_date__range=(fdate, tdate))

fdate和tdate是日期('YYYY-mm-dd'),entry_date有时间。 如何排列tdate的所有记录?

预先感谢

科斯塔斯

2 个答案:

答案 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-012018-07-01是示例fdatetdate

请注意,在时区的情况下,故事甚至可能变得更加复杂,因为本地日期和UTC日期之间可能会有差异。

答案 1 :(得分:1)

您可以使用fdatetdatedatetime.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,将确保该时间适合这些边界。

相关问题