2012-09-16 47 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