我想过滤第二天(了解时区)的所有数据。
假设:
我当前的做法是:
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或原始查询的直接解决方案?
注意:我想知道是否有更好的方法可以为自己节省一些操纵日期时间的代码
答案 0 :(得分:2)
不,没有。但是,您执行的操作也不是最佳方法,因为使用replace可能会导致日光节约的可能性。我建议使用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)))