在 Django 中过滤具有日期时间范围(00:00 到 23:59:99)的对象

Filter objects with a datetime range (00:00 to 23:59:99) in Django

我使用了带日期的 django 模型过滤器。

原始数据的时间为 Africa/Abidjan(UTC+00:00),我将此数据保存在我的数据库中。

我设置了大约 Asia/Seoul(UTC+09:00) 的时区,它很好地保存在我的数据库中。

但是我用time_range=[2015-11-15, 2015-11-16]过滤数据,我得到的是15点到14点的数据。我想获取0点到23点的数据

我怎样才能得到这个?我做了 this url,但效果不佳。

class Post(models.Model):
    created_time = models.DateTimeField()

如果我有像 post 这样的模型,我会从用户那里获取日期。

input_date = '2015-11-16' (from user)
from_date = datetime.strptime(input_date, '%Y-%m-%d').date()
to_date = from_date + datetime.timedelta(days=1)
posts = Post.objects.filter(created_time__range=[from_date, to_date])

我用上面的代码得到了2015-11-1515:00:00到2015-11-1614:00:00.

的数据

这是您可以将日期时间范围从 2015-11-16 00:002015-11-16 23:59:99

from datetime import datetime as dt
import datetime 

input_date = '2015-11-16'
# convert string to datetime
from_date = dt.strptime(input_date, '%Y-%m-%d').date()
# combine `from_date` with min time value (00:00)
from_date = datetime.datetime.combine(from_date, datetime.time.min)
# combine `from_date` with max time value (23:59:99) to have end date
to_date = datetime.datetime.combine(from_date, datetime.time.max)
posts = Post.objects.filter(created_time__range=(from_date, to_date))

您也可以使用:

from datetime import datetime

input_date = '2015-11-16'
# convert string to datetime
from_date = datetime.strptime(input_date, '%Y-%m-%d').date()
posts = Post.objects.filter(
    created_time__year=from_date.year, 
    created_time__month=from_date.month,
    created_time__day=from_date.day,
)

在你的情况下,使用:

datetime.datetime.combine(from_date,datetime.time.max).replace(tzinfo=timezone.utc)