【问题标题】:pytz timezone tags to adjust date printed in templatespytz 时区标签以调整模板中打印的日期
【发布时间】:2013-01-16 02:59:42
【问题描述】:

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

{% load tz %}

{{datetimeobject|timezone:"Europe/Paris"}}

{% timezone "Europe/Paris" %}
{{datetimeobject}}
{% endtimezone %}

这会打印出类似这样的内容:

Dec. 5, 2012, 4 p.m.
Dec. 5, 2012, 3 p.m.

因此时区过滤器会调整日期,但时区标签不会。

这是为什么呢?以及如何正确使用标签?我的目标是调整整个模板中的所有日期时间对象,而不为模板中打印的每个日期时间对象添加过滤器。


编辑

我试图让我的 dateobjects 时区感知:

offset = timezone('Europe/London')
datetimeobj.replace(tzinfo=offset)

但这并没有帮助 - 仍然是以前的代码,但具有 tz 意识的 datetimeobject 是:

Dec. 5, 2012, 4 p.m.
Dec. 5, 2012, 3 p.m.

已解决:我在上面的代码中有错误 - 应该是:

offset = timezone('Europe/London')
datetimeobj = datetimeobj.replace(tzinfo=offset)

【问题讨论】:

  • 我注意到你有 import tz 文档有 load tz 是故意的吗?
  • 我已经加载了我的原始代码,对不起,我会编辑这个
  • datetimeobj.replace(tzinfo=zone) 不正确,请改用zone.localize(datetimeobj, is_dst=None)(假设datetimeobj 是一个简单的日期时间对象)或zone.normalize(datetimeobj.astimezone(zone))(假设时区感知日期时间对象)。见pytz.sourceforge.net
  • 阅读 the link I provided 以了解它何时、如何以及为什么会中断。
  • 我建议直接使用timezone API of Django 并修改那里的示例。

标签: python django datetime pytz


【解决方案1】:

您说您使用“普通日期时间对象”,但显然它们是timezone naive instead of timezone aware。

timezone filter“强制将单个值转换为任意时区”,而timezone tag 只是设置当前时区直到endtimezone 标记。

您的datetimeobject 是时区幼稚的,时区过滤器会将其转换为具有默认时区的时区感知日期时间,然后在为过滤器提供的时区中表示它。

【讨论】:

  • 我尝试将 datwtimeobjects 转换为 tz 感知,但这没有帮助 - 请参阅我编辑的帖子
  • 抱歉我的错误应该是datetimeobj = datetimeobj.replace(tzinfo=offset) - 现在可以使用了,谢谢
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
相关资源
最近更新 更多