我要筛选第二天所有的数据(这是时区感知)。
假设:
我目前的做法是:
date = received_date_timezone_aware # any time of that day
lower = date.replace(hour=0,minute=0,second=0)
upper = lower + datetime.timedelta(day=1)
data = Model.objects.filter(date__gte=lower, date__lt=upper)
题
是否有使用Django ORM或原始查询直接解决这个?
注:我想知道是否有更好的办法可以救我的几行代码操纵日期时间喽
不,没有。但是你在做什么是不这样做既可以作为使用更换可能会导致有些古怪的地方与天灯节省的最佳途径。我推荐使用lower = received_date_timezone_aware.date()
。
这是假定Model.date
是DateField
。如果它是一个日期,然后这样做:
from datetime import time, datetime
def min_datetime(date: datetime, tz):
"""Get the min datetime of the given datetime and timezone.
:return datetime: Minimum datetime of the given date.
"""
return tz.localize(
datetime.combine(date.astimezone(tz).date(), time.min))
def max_datetime(date: datetime, tz):
"""Get the max datetime of the given datetime and timezone.
:return datetime: Maximum datetime of the given date.
"""
return tz.localize(
datetime.combine(date.astimezone(tz).date(), time.max))
Model.objects.filter(date__range=(min_datetime(value, tz), max_datetime(value, tz)))