在 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:00 到 2015-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)
我使用了带日期的 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:00 到 2015-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)