【问题标题】:django time zone for printing date打印日期的 django 时区
【发布时间】:2013-01-31 12:20:46
【问题描述】:

我在 settings.py 中设置了 TIME_ZONE = 'America/Chicago' 的 django 项目。

我正在使用这样的日期:

from django.utils.dateparse import parse_datetime
import datetime
from datetime import datetime

dateobject = parse_datetime(some_string)
now = datetime.now()
if now > dateobject:
    # do something

然后在我使用的模板中:

dateobject|date:"d M Y H:i"

我想在不同时区的所有模板中显示日期(例如 +6 小时)。但我希望项目时区为“美国/芝加哥”,并且 datetime.now() 返回的日期在这个时区。所以我只想将所有显示的日期更改为 +6 小时。我怎样才能做到这一点?


编辑

好的,这对我有用:

{% load tz %}
{{ datetimevalue|timezone:"Europe/Paris" }}

它打印 +1 小时的日期。但这不起作用:

{% load tz %}
{% timezone "Europe/Paris" %}
{{ datetimevalue }}
{% endtimezone %}

它打印日期不变。我必须为所有模板全局设置它。我该怎么做?

我总是使用日期过滤器 (dateobject|date:"d M Y H:i"),所以也许有什么方法可以全局“挂钩”此过滤器以将其更改为 dateobject|timezone:"Europe/Paris"|date:"d M Y H:i"

【问题讨论】:

    标签: python django datetime django-timezone


    【解决方案1】:

    这更像是一个 python 问题,您可以使用timedelta 变量将时间添加到datetime。例如

    import datetime
    b = datetime.datetime.now() + datetime.timedelta(hours=n)
    

    也可以直接更改datetime的时区,例如:

    datetime.astimezone(GMT2())
    

    或者在now 函数中使用tzinfo 变量:

    datetime.datetime.now(EST()) 
    

    因此,这些更改必须在您将某些内容传递给模板之前完成。

    【讨论】:

    • 我必须为我所有的 django 项目全局设置它 - 我无法跟踪每个日期函数的使用和修改它......
    • 然后,您应该重新配置您的应用程序,但您也可以从具有这些功能的模板中进行配置docs.djangoproject.com/en/dev/topics/i18n/timezones
    • 我编辑了我的问题 - 你的链接帮助了我,但不完全
    • 您可以使用template inheritance。如果这有帮助,您应该表示感谢。我也在寻找我的答案是你想要的,但知道你已经改变了你想要的。
    • 我写了时区标签不起作用 - 只有时区过滤器 - 所以我不能将它包含在模板继承中......
    【解决方案2】:

    请参阅:http://docs.djangoproject.com/en/dev/ref/settings/#time-zone

    {% now h:ia %}
    

    试试这个............

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多