是的,当启用对时区的支持时,Django 以 UTC 格式将日期和时间信息存储在数据库中,在内部使用时区感知的 datetime 对象,并在模板和表单中将它们转换为最终用户的时区。
在您的设置USE_TZ = True
文件中设置。
创建一个时区感知日期时间,首先将其转换为 utc 并在您的过滤器中使用它。
>>> import datetime
>>> import pytz
>>>
>>> unaware = datetime.datetime.strptime("20131103", "%Y%m%d")
>>> amsterdam = pytz.timezone('Europe/Amsterdam')
>>> aware = unaware.replace(tzinfo=amsterdam)
>>> d = aware.astimezone(pytz.UTC)
>>>
>>> unaware
datetime.datetime(2013, 11, 3, 0, 0)
>>> amsterdam
<DstTzInfo 'Europe/Amsterdam' AMT+0:20:00 STD>
>>> aware
datetime.datetime(2013, 11, 3, 0, 0, tzinfo=<DstTzInfo 'Europe/Amsterdam' AMT+0:20:00 STD>)
>>> d
datetime.datetime(2013, 11, 2, 23, 40, tzinfo=<UTC>)
>>>
现在您可以使用 d 过滤您的对象。
objs = SomeModel.objects.all()
objs.filter(date__year=d.year)
objs.filter(date__year=d.year, date_month=d.month)
objs.filter(date=d.date)