2015-10-20 75 views
0

我想從表中檢索最後n小時的行並在給定時區中打印它們的日期時間,給出打印日期時要使用的時區,我試圖使用激活以使django返回具有適當時區的日期時間,但它將以UTC的形式返回日期。在Django查詢中返回datetimes時間

這裏是我當前的代碼:

min_time = datetime.datetime.now(link.monitor.timezone) - datetime.timedelta(hours=period) 

timezone.activate(link.monitor.timezone) 
rows = TraceHttp.objects.values_list('time', 'elapsed').filter(time__gt=min_time,link_id=link_id,elapsed__gt=0) 

array = [] 
for row in rows: 
    array.append((row[0].astimezone(link.monitor.timezone),row[1])) 

我想避免使用astimezone功能,使Django的爲我做這個,有沒有有時候我缺少有關的激活功能?

編輯

這裏是我的模型,你可以看到顯示被保存在「監控」模式時區:從Django.utils

class Link(models.Model): 
    ... 
    monitor = models.ForeignKey(Monitor) 
    ... 

class Monitor(models.Model): 
    ... 
    timezone = TimeZoneField(default='Europe/London') 

class TraceHttp(models.Model): 
    link = models.ForeignKey(Link) 
    time = models.DateTimeField() 
    elapsed = models.FloatField() 

回答

1

更多信息的一些研究,我注意到Django的八方通返回日期時間爲UTC後,它取決於你要麼使用datetime.astimezone(時區)方法來解釋他們在正確的時區激活某個時區。

django活動函數只是改變日期時間將在模板上呈現的方式,但實際上並未本地化時區。

0

您現在可以使用()機能的研究,但是,您需要在設置中設置兩個變量。 USE_TZ和TIME_ZONE,第一個爲true,另一個爲默認時區,用於生成日期時間。 你可以看到Django文檔here

+0

你可以發佈一些代碼來展示now()函數如何與我的代碼一起工作嗎? 我已經設置了USE_TZ = True和TIME_ZONE,請注意link.monitor.timezone存儲在數據庫中,可能是任何時區 –

+0

好了,現在我明白了,你可以把模型中的字段怎麼樣?由於Django默認不存儲時區... – Stortz