使用pytz时区标签调整模板中打印的日期
在我的应用程序中,我使用的是普通的日期时间对象。在我的模板里:
{% load tz %}
{{datetimeobject|timezone:"Europe/Paris"}}
{% timezone "Europe/Paris" %}
{{datetimeobject}}
{% endtimezone %}
这会打印出类似这样的内容:
Dec. 5, 2012, 4 p.m.
Dec. 5, 2012, 3 p.m.
所以,时区过滤器会调整日期,但时区标签却没有。
这是为什么呢?我该如何正确使用这个标签?我的目标是让整个模板中的所有日期时间对象都能自动调整时区,而不需要在每个打印的日期时间对象上都加过滤器。
编辑
我尝试让我的日期对象支持时区:
offset = timezone('Europe/London')
datetimeobj.replace(tzinfo=offset)
但这并没有帮助——之前的代码还是一样,只不过现在是支持时区的日期时间对象:
Dec. 5, 2012, 4 p.m.
Dec. 5, 2012, 3 p.m.
解决了:我在上面的代码中犯了个错误——应该是:
offset = timezone('Europe/London')
datetimeobj = datetimeobj.replace(tzinfo=offset)
1 个回答
3
你说你在用“普通的日期时间对象”,但实际上它们是不考虑时区的,而不是考虑时区的。
这个时区过滤器会“强制把一个值转换到任意时区”,而时区标签只是设置当前的时区,直到遇到endtimezone
标签。
你的datetimeobject
是不考虑时区的,时区过滤器会把它转换成一个考虑时区的日期时间对象,使用默认的时区,然后再根据你给过滤器的时区来显示。