date_format Django 1.4具有正确的时区

byo*_*ngb 4 django timezone django-1.4

好的简单问题(我认为).

我有一个DateTime字段(auto_add_now)并输出到模板

{{ edited|date:"DATETIME_FORMAT" }}
Run Code Online (Sandbox Code Playgroud)

我得到了"2012年9月16日下午12:01"的预期结果

但不幸的是,由于我使用的是Backbone.js并且需要使用JSON传递日期时间,所以事情稍微复杂一些,因为它仅用于显示目的,所以我决定将它作为一个很好的语言环境格式化字符串传递.所以我挖掘代码并找到模板标签使用的内容,这就是我设置的内容.

from django.utils.formats import date_format
return {
    'created': date_format(self.created, 'DATETIME_FORMAT'),
}
Run Code Online (Sandbox Code Playgroud)

但最终结果是"2012年9月16日下午5:01"

我觉得它与模板标签上的以下内容有关

@register.filter(expects_localtime=True, is_safe=False)
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个,但结果却相同

from django.utils import timezone
tz = timezone.get_current_timezone()
logger.info(tz)
logger.info(self.edited)
logger.info(format(self.edited, 'DATETIME_FORMAT'))
logger.info(self.edited.replace(tzinfo=tz))
logger.info(format(self.edited.replace(tzinfo=tz), 'DATETIME_FORMAT'))
Run Code Online (Sandbox Code Playgroud)

哪个给了我这个

INFO: America/Chicago
INFO: 2012-09-16 17:01:52.921276+00:00
INFO: Sept. 16, 2012, 5:01 p.m.
INFO: 2012-09-16 17:01:52.921276-06:00
INFO: Sept. 16, 2012, 5:01 p.m.
Run Code Online (Sandbox Code Playgroud)

所以,是的,我一定是在遗漏一些东西,而且我一直在django文档上下,找不到任何可以指出我做错的事情.谢谢你的帮助.

byo*_*ngb 7

我想到了.遗憾的是,在Django Timezones文档中,我认为我已经筋疲力尽了.本地化使用 timezone.localtime()

from django.utils.formats import date_format
from django.utils import timezone
date_format(timezone.localtime(page.created), 'DATETIME_FORMAT')
Run Code Online (Sandbox Code Playgroud)