2012-09-16 30 views
3

好的简单问题(我认为)。date_format Django 1.4正确时区

我有一个DateTime字段(auto_add_now),当输出模板

{{ edited|date:"DATETIME_FORMAT" }} 

我得到预期的结果“2012年9月16日,下午12时01分”

但不幸的是,由于我使用的是Backbone.js,并且需要使用JSON传递日期时间,并且由于它仅用于显示目的,我决定将它作为一个很好的区域设置格式化的字符串传递。所以我深入了解代码并发现了模板标签的用途,这就是我所设置的。 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文档和c annot找到任何可能指向我所做错误的事情。谢谢你的帮助。

回答

4

我想通了。可悲的是,在Django Timezones文档中,我认为我已经用尽了。 Localize Usagetimezone.localtime()

from django.utils.formats import date_format 
from django.utils import timezone 
date_format(timezone.localtime(page.created), 'DATETIME_FORMAT') 
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) 
+0

我曾想过这一点,但不想因为这会复杂化我的客户端代码,当前的日期只是用于显示目的,并与骨干自动显示。 js/underscore.js模板以及其他六个字符串字段和编码条件来处理日期似乎是额外的工作。 (如果找不到更好的解决方案,我会接受这个答案,因为它可能是唯一的方法) – byoungb