繁体   English   中英

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

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

我用django模型过滤器和日期。

原始数据的时间为非洲/阿比让(UTC + 00:00),我将这些数据保存在数据库中。

我设置了关于亚洲/首尔的时区(UTC + 09:00),并将其保存在我的数据库中。

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

我怎么能得到这个? 我执行此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-15 15:00:00到2015-11-16 14: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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM