使用pytz时区标签调整模板中打印的日期

4 投票
1 回答
512 浏览
提问于 2025-04-17 14:22

在我的应用程序中,我使用的是普通的日期时间对象。在我的模板里:

{% 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是不考虑时区的,时区过滤器会把它转换成一个考虑时区的日期时间对象,使用默认的时区,然后再根据你给过滤器的时区来显示。

撰写回答