gpt4 book ai didi

python - 如何使用时区感知日期过滤模型?

转载 作者:行者123 更新时间:2023-11-28 22:53:40 31 4
gpt4 key购买 nike

所以我试图按日期过滤 Django 模型。仅使用年、年+月或年+月+day_of_month。我现在使用的策略是这样的:

n.filter(create_date__year=q)
n.filter(create_date__year=q[:4],create_date__month=q[4:6])
n.filter(create_date__year=q[:4],create_date__month=q[4:6],create_date__day=q[6:8])

其中“q”是日期字符串,格式分别为“yyyy”、“yyyymm”或“yyyymmdd”。

这工作得很好但是django 没有考虑时区。 Django 搜索基于 UTC 时间而不是 EDT,这是实际 datetime 对象设置的内容。

有没有办法根据特定时区搜索年/月/日?

最佳答案

是的,当启用对时区的支持时,Django 在数据库中以 UTC 格式存储日期和时间信息,在内部使用时区感知日期时间对象,并在模板和表单中将它们转换为最终用户的时区。

在您的设置文件中设置 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)

关于python - 如何使用时区感知日期过滤模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162722/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com