日期格式Django 1.4,时区正确

日期格式Django 1.4,时区正确,django,timezone,django-1.4,Django,Timezone,Django 1.4,好的,简单的问题(我想) 我有一个DateTime字段(auto_add_now)和何时输出到模板 {{ edited|date:"DATETIME_FORMAT" }} 我得到了“2012年9月16日下午12:01”的预期结果 但不幸的是,事情稍微复杂一些,因为我使用的是Backbone.js,需要用JSON传递datetime,而且因为它只用于显示目的,所以我决定将它作为一个很好的区域设置格式字符串传递。因此,我深入研究了代码,找到了模板标记使用的内容,这就是我设置的内容 from dja

好的,简单的问题(我想)

我有一个DateTime字段(auto_add_now)和何时输出到模板

{{ edited|date:"DATETIME_FORMAT" }}
我得到了“2012年9月16日下午12:01”的预期结果

但不幸的是,事情稍微复杂一些,因为我使用的是Backbone.js,需要用JSON传递datetime,而且因为它只用于显示目的,所以我决定将它作为一个很好的区域设置格式字符串传递。因此,我深入研究了代码,找到了模板标记使用的内容,这就是我设置的内容

from django.utils.formats import date_format
return {
    'created': date_format(self.created, 'DATETIME_FORMAT'),
}
但结果是“2012年9月16日下午5:01”

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

@register.filter(expects_localtime=True, is_safe=False)
我也试过了,但结果还是一样的

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'))
这给了我这个

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.

所以,是的,我肯定错过了一些东西,我在django文档中走来走去,找不到任何可以指出我做错了什么的东西。谢谢你的帮助。

也许下面的内容会对你有所帮助

>>> obj = MyModel.objects.get(...)
>>> data = {"date_format": obj.edited}
>>> from django.core.serializers.json import DjangoJSONEncoder
>>> data = json.dumps(data, cls=DjangoJSONEncoder)
>>> data
'{"date_format": "2012-09-16T21:45:46Z"}'
从视图中发送json格式的数据:

E.g return HttpResponse(data, mimetype='application/json').      
然后在客户端代码中,您可以将
date\u格式
转换为本地时区,具体如下: (假设
response
是JSON解析的对象)


我想出来了。不幸的是,在Django时区的文档中,我认为我已经筋疲力尽了timezone.localtime()


我已经想到了这一点,但不想这样做,因为这会使我的客户端代码复杂化。目前,日期仅用于显示目的,并使用backbone.js/underline.js模板以及六个其他字符串字段自动显示,编写条件来处理日期似乎是额外的工作。(如果找不到更好的解决办法,我会接受这个答案,因为这很可能是唯一的解决办法)
var d = new Date(Date.parse(response.date_format));
// Sun Sep 16 2012 22:45:46 GMT+0100 (BST)
from django.utils.formats import date_format
from django.utils import timezone
date_format(timezone.localtime(page.created), 'DATETIME_FORMAT')