django 时区
1. 時區由來
地球是自西向東自轉,東邊比西邊先看到太陽,東邊的時間也比西邊的早。東邊時刻與西邊時刻的差值不僅時區時區(4張)要以時計,而且還要以分和秒來計算,這給人們帶來不便。
為了克服時間上的混亂,按經度將全球劃分為24個時區,相鄰時區相差一個小時。規定英國(格林尼治天文臺舊址)為中時區(零時區),中國為東八區。
GMT 0:00 格林尼治標準時間
UT +00:00 全球時間
UTC +00:00 校準的全球時間
CCT +08:00 中國北京時間(俄羅斯伊爾庫茨克時區)
GMT,即格林尼治標準時間,也就是世界時。GMT的正午是指當太陽橫穿格林尼治子午線(本初子午線)時的時間。但由于地球自轉不均勻不規則,導致GMT不精確,現在已經不再作為世界標準時間使用。
UTC,即協調世界時。UTC是以原子時秒長為基礎,在時刻上盡量接近于GMT的一種時間計量系統。為確保UTC與GMT相差不會超過0.9秒,在有需要的情況下會在UTC內加上正或負閏秒。UTC現在作為世界標準時間使用。
所以,UTC與GMT基本上等同,誤差不超過0.9秒。
2.django 時間類型
offset-aware與offset-navie
在Python中,有一個datetime模塊,相信大家都很熟悉。但是很少有人知道這個模塊的時間還可以分下面兩種類型:
offset-naive:不含時區的類型
offset-aware:有時區的類型
并且,這兩種類型的時間是不可以直接比較的,比如做減法、加法、時間對比等,會拋出下面的異常:
根本的原因在于兩者一個有時區信息,一個沒有。
我們可以通過查看datetime對象的tzinfo屬性,來判斷具體是兩者中的哪種:
>>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2020, 5, 26, 18, 36, 59, 811729) >>> now.tzinfo >>> now.tzinfo==None True可以很清楚的看到,datetime.datetime.now()是一個offset-naive類型,不含時區信息的時間對象。
我們可以借助pytz模塊,將一個offset-naive類型的時間對象轉換為一個offset-aware類型的時間對象。
先安裝pytz模塊:
pip install pytz來測試一下:
>>> import pytz >>> now = now.replace(tzinfo=pytz.timezone('UTC')) >>> now datetime.datetime(2020, 5, 26, 18, 36, 59, 811729, tzinfo=<UTC>) >>> now.tzinfo <UTC> 反過來,也可以將一個offset-aware型轉換為offset-naive型:>>> now = now.replace(tzinfo=None) >>> now datetime.datetime(2020, 5, 26, 18, 36, 59, 811729) >>> now.tzinfo == None True3.django 設置
LANGUAGE_CODE = 'zh-hans' # 語言TIME_ZONE = 'UTC' # 時區USE_I18N = True # 翻譯插件USE_L10N = True # 時間顯示格式USE_TZ = True # 附件時區信息參考文檔:
博客:https://www.cnblogs.com/django-dev/p/12968403.html
百度百科:https://baike.baidu.com/item/%E6%97%B6%E5%8C%BA/491122?fr=aladdin#5
總結
- 上一篇: html柳树动画,3D教程-柳树生长动画
- 下一篇: bash type php,Linux