A.J*_*.J. 1 python django timezone datetime
我有以下问题,无法弄清楚我在这里缺少什么.
我在settings.py中启用了时区
TIME_ZONE = 'America/Chicago'
USE_TZ = True
现在,当我在下午3点15分(当地时间)创建了一个对象时,我created_at在数据库中的字段中存储了以下日期.
created_at = models.DateTimeField(auto_now_add=True)
2014-12-12 11:03:48
当我在模板中渲染该日期时,我得到以下值.
{{ image.created_at }} =>
Dec. 12, 2014, 5:03 a.m.
from datetime import datetime
from dateutil.tz import tzutc, tzlocal
utc = datetime.now(tzutc())
print('UTC: ' + str(utc))
local = utc.astimezone(tzlocal())
print('Local: ' + str(local))
Run Code Online (Sandbox Code Playgroud)
我在这里得到正确的日期时间.当我使用myobject.created_at.astimezone(tzlocal())它也返回正确.但它在模板中我提前1小时.为什么?我试过两个|local过滤器也没用
我错过了什么?
Django 总是以 UTC 格式存储数据,并带有时区感知信息。您的 settings.py 用于美国/芝加哥,因此模板会相应地呈现它。
您可以在模板中使用时区过滤器来始终显示本地时间{{ image.created_at | localtime }}。在模板开始时做{% load tz %}时区标签库。
IE
{% load tz %}
<!-- template -->
{{ image.created_at | localtime }}
<!-- more template -->
Run Code Online (Sandbox Code Playgroud)
将以下代码段添加到base.html {% load tz %} {% timezone "Asia/Kolkata" %}
<All content goes here>{% endtimezone %}
将此代码
继承到所有模板.一切都在"亚洲/加尔各答"时区呈现
来自文档:
当地时间
强制将单个值转换为当前时区。
例如:
{% load tz %}
{{ value|localtime }}
Run Code Online (Sandbox Code Playgroud)