django 打印日期的时区设置

3 投票
2 回答
7289 浏览
提问于 2025-04-17 14:18

我有一个Django项目,在settings.py文件中设置了TIME_ZONE = 'America/Chicago'

我使用日期的方式是这样的:

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小时)。但是我希望项目的时区保持为'America/Chicago',并且通过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"呢?

2 个回答

0

请查看这个链接: http://docs.djangoproject.com/en/dev/ref/settings/#time-zone

{% now h:ia %}

试试这个……

2

这更像是一个关于Python的问题,你可以使用timedelta这个变量来给datetime加上时间。例如:

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

或者你可以直接改变datetime的时区,比如:

datetime.astimezone(GMT2())

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

datetime.datetime.now(EST()) 

所以这些更改必须在你把内容传递给模板之前完成。

撰写回答