好的简单问题(我认为)。
我有一个DateTime字段(auto_add_now),当输出到模板
时{{ edited|date:"DATETIME_FORMAT" }}
我得到了“2012年9月16日下午12点01分”的预期结果。
但不幸的是,由于我使用的是Backbone.js并且需要使用JSON传递日期时间,所以事情稍微复杂一些,因为它仅用于显示目的,所以我决定将其作为一个很好的语言环境格式化字符串传递。所以我挖掘了代码并找到了模板标签使用的内容,这就是我设置的内容。
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文档上下来,找不到任何可以指出我做错的事情。谢谢你的帮助。
答案 0 :(得分:6)
我明白了。遗憾的是,在Django Timezones文档中,我认为我已经筋疲力尽了。 Localize Usage timezone.localtime()
from django.utils.formats import date_format
from django.utils import timezone
date_format(timezone.localtime(page.created), 'DATETIME_FORMAT')
答案 1 :(得分:1)
也许以下内容会对您有所帮助。
>>> 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_format
转换为本地时区:
(假设response
是JSON解析对象)
var d = new Date(Date.parse(response.date_format));
// Sun Sep 16 2012 22:45:46 GMT+0100 (BST)