欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Django 中是否使用時區(qū)的區(qū)別

 更新時間:2018年06月14日 14:21:00   作者:棲遲于一丘  
本篇文章主要介紹了詳解Django 中是否使用時區(qū)的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

起步

在 Django 的模型中新加了一個日期的字段:

import datetime
class Instance(models.Model):
  ...
  start_time = models.DateTimeField(default=datetime.datetime.now)

同步到數(shù)據(jù)庫時 Django 報出了一個警告:

django/db/models/fields/__init__.py:1423: RuntimeWarning: DateTimeField Instance.start_time received a naive datetime (2018-06-14 08:59:54.761510) while time zone support is active.

這個意思是應(yīng)用中開啟了時區(qū)功能,而字段中卻使用了 naive datetime 。我看了配置文件確實啟用的時區(qū)的功能:

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True

如果設(shè)置了使用時區(qū),那么Django在數(shù)據(jù)庫中以 UTC 存儲日期時間信息。

要想知道時區(qū)的 Django 中的作用,我們要先了解時間有時區(qū)的沒有時區(qū)的區(qū)別。

帶時區(qū)與不帶時區(qū)

日期時間存在兩個概念: naive time 和 aware time 。 naive time 就是不帶時區(qū)的時間, aware time 則是帶時區(qū)的時間。比方說, datatime.datetime.utcnow() datatime.datetime.now() ,前者是 UCT 時間,后者會取機器上的本地時間,這兩者呢,對于 django 來說,都是不帶時區(qū)的時間(下一段會講原因);而使用 django.utils.timezone.now() 才是帶時區(qū)的時間(aware time)。

datetime.datetime.now() 輸出永遠都是本地時間,與配置沒有任何關(guān)系。 datatime.datetime.utcnow() 則是當前的UTC日期和時間, datetime 模塊是 python 的標準庫,盡管 datetime.datetime 對象有一個 tzinfo 屬性可以用來存儲時區(qū)信息。除非該對象設(shè)置了 tzinfo 屬性,否則統(tǒng)統(tǒng)會被 django 認為是 naive time 。判斷可以通過 is_naive() 來判斷:

import datetime
from django.utils import timezone

print(timezone.is_naive( datetime.datetime.now() ))  # False
print(timezone.is_naive( datetime.datetime.utcnow() )) # False

顯然 now() 和 utcnow() 都是沒有設(shè)置 tzinfo 的。

django判斷日期對象是否是原生的唯一標準就是該對象是否設(shè)置了 tzinfo

datetime 與 timezone

datetime 是標準庫的模塊, timezone 是 django 提供的時區(qū)的工具, timezone 其實是在 datetime 基礎(chǔ)上進行的整合的,比方 django 中的 now 函數(shù):

[timezone.py]
def now():
  """
  Return an aware or naive datetime.datetime, depending on settings.USE_TZ.
  """
  if settings.USE_TZ:
    # timeit shows that datetime.now(tz=utc) is 24% slower
    return datetime.utcnow().replace(tzinfo=utc)
  else:
    return datetime.now()

返回的其實也是一個 datetime 對象。

設(shè)置了 USE_TZ=True 之后

設(shè)置了 USE_TZ=True 之后,model 里面認為 DateTimeField 使用的是UTC時間(帶時區(qū)的時間),這時用 datetime.datetime.now() 獲取的時間是不帶時區(qū)的就會報最開始說的那個警告。

并且呢, 所有的存儲和內(nèi)部處理,全部都是 UTC 時間 ,包括 timezone.now() ,存儲也就是指數(shù)據(jù)庫中存儲的是UTC時間,也就只有在表單輸入或模板渲染輸出的時候,才會執(zhí)行 UTC 到時區(qū)的轉(zhuǎn)換。基本對于開發(fā)者而言,基本不用考慮本地時間的存在,所有的使用都是 UTC 時間,這也能避免手殘的手動轉(zhuǎn)換,盡量使用 Django 系統(tǒng)代勞。

USE_TZ=False 則所有關(guān)于時間和時區(qū)的問題都有開發(fā)人員自己把控。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 教你在Excel中調(diào)用Python腳本實現(xiàn)數(shù)據(jù)自動化處理的方法

    教你在Excel中調(diào)用Python腳本實現(xiàn)數(shù)據(jù)自動化處理的方法

    Excel是全世界最流行的編程語言,Excel已經(jīng)可以實現(xiàn)編程語言的算法,因此它是具備圖靈完備性的,和JavaScript、Java、Python一樣,今天通過本文給大家介紹下Python數(shù)據(jù)自動化處理的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • python中isoweekday和weekday的區(qū)別及說明

    python中isoweekday和weekday的區(qū)別及說明

    這篇文章主要介紹了python中isoweekday和weekday的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 解決遇到:PytorchStreamReader failed reading zip archive:failed finding central錯誤問題

    解決遇到:PytorchStreamReader failed reading zip&n

    本文針對"PytorchStreamReaderfailedreadingziparchive:failedfindingcentral"錯誤提出解決方案,包括檢查文件完整性、文件路徑,嘗試更新PyTorch版本,檢查壓縮文件格式,代碼問題,或?qū)で蠹夹g(shù)支持等,希望這些經(jīng)驗?zāi)芙o遇到同樣問題的人一個參考
    2024-09-09
  • python創(chuàng)建生成器以及訪問的方法詳解

    python創(chuàng)建生成器以及訪問的方法詳解

    這篇文章主要介紹了python創(chuàng)建生成器以及訪問的方法詳解,與列表一次性地將數(shù)據(jù)全都加載到內(nèi)存不同的是,生成器使用推斷加載數(shù)據(jù),每次只推斷出一個對象,在數(shù)據(jù)量比較大時,可以節(jié)省內(nèi)存,需要的朋友可以參考下
    2023-11-11
  • python使用matplotlib的savefig保存時圖片保存不完整的問題

    python使用matplotlib的savefig保存時圖片保存不完整的問題

    這篇文章主要介紹了python使用matplotlib的savefig保存時圖片保存不完整的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 解決Django no such table: django_session的問題

    解決Django no such table: django_session的問題

    這篇文章主要介紹了解決Django no such table: django_session的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • pygame實現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇2)

    pygame實現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇2)

    這篇文章主要為大家介紹了pygame實現(xiàn)俄羅斯方塊游戲基礎(chǔ)的第2篇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 如何利用opencv訓練自己的模型實現(xiàn)特定物體的識別

    如何利用opencv訓練自己的模型實現(xiàn)特定物體的識別

    在Python中通過OpenCV自己訓練分類器進行特定物體實時識別,下面這篇文章主要給大家介紹了關(guān)于如何利用opencv訓練自己的模型實現(xiàn)特定物體的識別,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • 初次部署django+gunicorn+nginx的方法步驟

    初次部署django+gunicorn+nginx的方法步驟

    這篇文章主要介紹了初次部署django+gunicorn+nginx的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 在python中pandas讀文件,有中文字符的方法

    在python中pandas讀文件,有中文字符的方法

    今天小編就為大家分享一篇在python中pandas讀文件,有中文字符的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論