2013-04-08 56 views
0

Django文檔非常清楚,不應該使用天真的日期時間,但是我認爲我想我需要它們的用例相當普遍。有時在我的項目中需要跨時區查詢對象,但是需要根據當地時間進行查詢。在Django中使用天真和時區感知的日期時間

例如,而這僅僅是一個人爲的例子,讓我們說,我想找到根據每個用戶的本地時區誰最後更新4至下午5點他們的個人資料在某一天的所有用戶,。我可以簡單地這樣做,因爲:

qs = User.objects.filter(profile__datelastupdated__gte=datetime(2013,4,1,16)) 
qs = qs.filter(profile__datelastupdated__lte=datetime(2013,4,1,17)) 

但是,因爲我的時區支持活躍這會導致警告:

RuntimeWarning: DateTimeField received a naive datetime (YYYY-MM-DD HH:MM:SS) while time zone support is active. 

我明白爲什麼該警告是越來越拋出,所以我的問題是:我是沒有以正確的方式考慮日期時間?有沒有一種習慣性的Django方法可以讓tz知道日期時間的特異性,而這正是您想要的,並且還具有期望的通用性,有時需要由天真的日期時間提供?

回答

0

您必須使用datetime + timezone過濾數據庫中的所有日期數據庫中的所有日期始終存儲爲utc。如果你提供的日期沒有時區django把它默認爲utc,並給你交戰。
如果您支持時區,則必須存儲用戶時區。 詢問數據庫日期+當前用戶時區與放置日期相同。

相關問題