Django若是開啓了Time Zone功能,則全部的存儲和內部處理,甚至包括直接print
顯示全都是UTC的。只有經過模板進行表單輸入/渲染輸出的時候,纔會執行UTC本地時間的轉換。數據庫
因此我建議後臺處理時間的時候,最好徹底使用UTC,不要考慮本地時間的存在。而顯示時間的時候,也避免手動轉換,儘可能使用Django模板系統代勞。django
啓用 USE_TZ = True
後,處理時間方面,有兩條 「黃金法則」:ide
保證存儲到數據庫中的是 UTC 時間;函數
在函數之間傳遞時間參數時,確保時間已經轉換成 UTC 時間;spa
好比,一般獲取當前時間用的是:code
import datetime now = datetime.datetime.now()
啓用 USE_TZ = True
後,須要寫成:orm
import datetime from django.utils.timezone import utc utcnow = datetime.datetime.utcnow().replace(tzinfo=utc)
模板it
除非應用支持用戶設置本身所在的時區,一般咱們不須要關心模板的時區問題。模板在展現時間的時候,會使用 settings.TIME_ZONE
中的設置自動把 UTC 時間轉成 settings.TIME_ZONE
所在時區的時間渲染。模板
通常設置爲:class
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False