關於django的時區設置

    Django如果開啓了Time Zone功能,則所有的存儲和內部處理,甚至包括直接print顯示全都是UTC的。只有通過模板進行表單輸入/渲染輸出的時候,纔會執行UTC本地時間的轉換。

    所以我建議後臺處理時間的時候,最好完全使用UTC,不要考慮本地時間的存在。而顯示時間的時候,也避免手動轉換,儘量使用Django模板系統代勞。

 

   啓用 USE_TZ = True 後,處理時間方面,有兩條 “黃金法則”:

  1. 保證存儲到數據庫中的是 UTC 時間;

  2. 在函數之間傳遞時間參數時,確保時間已經轉換成 UTC 時間;

    比如,通常獲取當前時間用的是:

import datetime
now = datetime.datetime.now()

   啓用 USE_TZ = True 後,需要寫成:

import datetime 
from django.utils.timezone import utc
utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)

  模板

      除非應用支持用戶設置自己所在的時區,通常我們不需要關心模板的時區問題。模板在展示時間的時候,會使用 settings.TIME_ZONE 中的設置自動把 UTC 時間轉成 settings.TIME_ZONE 所在時區的時間渲染。


一般設置爲:

 TIME_ZONE = 'Asia/Shanghai'

 USE_TZ = False


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章