Django 處理UTC和本地時間問題

原文:https://juejin.im/post/5848b301128fe1006907d5ed
參考鏈接:http://www.ywnds.com/?p=12274

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

所以我建議后臺處理時間的時候,最好完全使用UTC,不要考慮本地時間的存在。而顯示時間的時候,也避免手動轉(zhuǎn)換,盡量使用Django模板系統(tǒng)代勞。

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

保證存儲到數(shù)據(jù)庫中的是 UTC 時間;
在函數(shù)之間傳遞時間參數(shù)時,確保時間已經(jīng)轉(zhuǎn)換成 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)

模板

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

TIME_ZONE = 'Asia/Shanghai'

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容