2014-01-30 73 views
1

我完全難以保存用戶輸入的日期時間。它可以保存,但是會進行某種時區轉換。我嘗試設置USE_TZ = True和TIME_ZONE ='UTC',但由於某種奇怪的原因,Django保存了我的日期時間,但它從小時開始減少了7。例如,如果我輸入日期時間爲'2014-01-29 16:56:00',當我查看數據庫時,我看到'2014-01-29 09:56:00-07'。我已經閱讀過時區文檔,但我完全不明白爲什麼會發生這種情況。任何幫助將不勝感激!Django在DB保存上轉換日期時間

+0

是在settings.py中正確設置的時區? – sirFunkenstine

+0

我相信如此,我的設置設置爲TIME_ZONE ='UTC'。我猜更大的問題是,在保存到模型時,Django是否總是嘗試進行某種時區轉換? – tmuzzin

回答

1

看來,這不是專門與Django的問題,但更多的與Postgres問題。由於Django會告訴Postgres創建一個「帶時區的時間戳」,因此Postgres會正確存儲時間戳,併爲您直接從Postgres查詢數據時設置一個偏移量,它會向您顯示應用偏移量的時間戳。但是當數據返回到Django時,除非您提供了偏移量,否則偏移量將被刪除。似乎令人困惑,不知道爲什麼這樣做。對於我的特定用例,我選擇編寫自定義字段來創建「無時區的時間戳」。 Django只創建「帶時區的時間戳」,因此解決此問題的唯一方法是:

  1. 用SQL修改表。如果使用South,部署到多個環境可能不是最佳選擇。

  2. 創建一個自定義字段,創建「沒有時區的時間戳」。這是我決定去的路線。希望這是正確的路線。

謝謝大家試圖幫助我弄清楚這一點。

0

Django文檔狀態默認時區設置爲:

TIME_ZONE = 'America/Chicago' 

這裏的鏈接:

https://docs.djangoproject.com/en/dev/ref/settings/#time-zone

他們設置TIME_ZONE時,也註明了幾個選項。一種選擇是按名稱手動設置,這裏是關Django的文檔的鏈接爲TIME_ZONE名稱列表:

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

+0

我已將我的時區設置設置爲'UTC',但仍保存時從UTC時間減去7。我目前在丹佛時區,這是從UTC -7,但沒有設置丹佛在我的設置任何地方。芝加哥從UTC開始是-6,所以它絕對不是在某處攫取默認值。 – tmuzzin

+0

檢查上面的django文檔鏈接。您可能需要設置另一個與time_zone相關的設置,因此它不會默認從您所在的時區開始。 –

+0

我很欣賞你試圖幫助我,但我已經閱讀了這些文檔的狗屎,沒有什麼會引導我爲什麼我的時區設置爲UTC時獲得-7時區。 – tmuzzin