我想弄清楚在Django中發生的時區轉換髮生了什麼。Django + Postgres時區
我的看法代碼如下,它過濾的日期範圍和羣體上創造的日:
def stats_ad(request):
start_date = datetime.datetime.strptime(request.GET.get('start'), '%d/%m/%Y %H:%M:%S')
end_date = datetime.datetime.strptime(request.GET.get('end'), '%d/%m/%Y %H:%M:%S')
fads = Ad.objects.filter(created__range=[start_date, end_date]).extra(select={'created_date': 'created::date'}).values('created_date').annotate(total=Count('id')).order_by("created_date")
由Django的產生,當我開始的獲取變量設置爲SQL查詢「 2013年1月5日00:00:00" ,並且請求結束變量設置爲‘2013年11月5日23:59:00’:
SELECT (created::date) AS "created_date", COUNT("ads_ad"."id") AS "total" FROM "ads_ad" WHERE "ads_ad"."created" BETWEEN E'2013-05-01 00:00:00+10:00' and E'2013-05-11 23:59:59+10:00' GROUP BY created::date, (created::date) ORDER BY "created_date" ASC
如果我手動運行在我的PostgreSQL數據庫,這一切都很好,找到以下內容:
created_date total
2013-05-10 22
2013-05-11 1
但是如果我做到以下幾點:
for a in fads:
recent_ads.append({"dates": a['created_date'].strftime('%d/%m/%Y'), 'ads': a['total']})
它給了我下面的輸出:
[{"dates": "09/05/2013", "ads": 1}, {"dates": "10/05/2013", "ads": 22}]
我在在爲什麼它改變了日期的損失?
任何人有任何想法?
乾杯, 奔
任何想法如何我會在我的代碼aboe做到這一點?我已經嘗試在創建datetime對象的子句中添加「replace(tzinfo = utc)」,但仍然有相同的結果,但是有關天真datetimes的警告已從控制檯中消失了..它似乎在輸出中。 – 2013-05-13 05:18:54
你可能應該使用你的真實時區而不是'utc',就像'datetime.datetime.utcnow()。replace(tzinfo = pytz.timezone('Israel'))' – 2013-05-13 05:26:49
done,samething tho,there there way to apply that到輸出? 「a ['created_date']。strftime('%d /%m /%Y')」? – 2013-05-13 05:32:11