最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

起步

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

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

同步到數(shù)據(jù)庫時(shí) Django 報(bào)出了一個(gè)警告:

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.

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

TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True

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

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

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

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

datetime.datetime.now() 輸出永遠(yuǎn)都是本地時(shí)間,與配置沒有任何關(guān)系。 datatime.datetime.utcnow() 則是當(dāng)前的UTC日期和時(shí)間, datetime 模塊是 python 的標(biāo)準(zhǔn)庫,盡管 datetime.datetime 對象有一個(gè) tzinfo 屬性可以用來存儲(chǔ)時(shí)區(qū)信息。除非該對象設(shè)置了 tzinfo 屬性,否則統(tǒng)統(tǒng)會(huì)被 django 認(rèn)為是 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判斷日期對象是否是原生的唯一標(biāo)準(zhǔn)就是該對象是否設(shè)置了 tzinfo

datetime 與 timezone

datetime 是標(biāo)準(zhǔn)庫的模塊, timezone 是 django 提供的時(shí)區(qū)的工具, timezone 其實(shí)是在 datetime 基礎(chǔ)上進(jìn)行的整合的,比方 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()

返回的其實(shí)也是一個(gè) datetime 對象。

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

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

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

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

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

相關(guān)文章

  • Python干貨實(shí)戰(zhàn)之八音符醬小游戲全過程詳解

    Python干貨實(shí)戰(zhàn)之八音符醬小游戲全過程詳解

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python實(shí)現(xiàn)一個(gè)八音符醬小游戲,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-10-10
  • python中stdout輸出不緩存的設(shè)置方法

    python中stdout輸出不緩存的設(shè)置方法

    這篇文章主要介紹了python中stdout輸出不緩存的設(shè)置方法,這個(gè)方法只在比較特殊的環(huán)境中使用,需要的朋友可以參考下
    2014-05-05
  • python最常用的三種輸出格式解讀

    python最常用的三種輸出格式解讀

    這篇文章主要介紹了python最常用的三種輸出格式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Pyspark讀取parquet數(shù)據(jù)過程解析

    Pyspark讀取parquet數(shù)據(jù)過程解析

    這篇文章主要介紹了pyspark讀取parquet數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python生成lmdb格式的文件實(shí)例

    python生成lmdb格式的文件實(shí)例

    今天小編就為大家分享一篇python生成lmdb格式的文件實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python3實(shí)現(xiàn)定時(shí)任務(wù)的四種方式

    Python3實(shí)現(xiàn)定時(shí)任務(wù)的四種方式

    Python實(shí)現(xiàn)定點(diǎn)與定時(shí)任務(wù)方式比較多,找到下面四中實(shí)現(xiàn)方式,每個(gè)方式都有自己應(yīng)用場景;下面來快速介紹Python中常用的定時(shí)任務(wù)實(shí)現(xiàn)方式,一起看看吧
    2019-06-06
  • Python反射的用法實(shí)例分析

    Python反射的用法實(shí)例分析

    這篇文章主要介紹了Python反射的用法,結(jié)合實(shí)例形式分析了Python反射機(jī)制所涉及的幾個(gè)常用方法與相關(guān)使用技巧,需要的朋友可以參考下
    2018-02-02
  • 詳解用python計(jì)算階乘的幾種方法

    詳解用python計(jì)算階乘的幾種方法

    這篇文章主要介紹了詳解用python計(jì)算階乘的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python實(shí)現(xiàn)圖片中文字分割效果

    python實(shí)現(xiàn)圖片中文字分割效果

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片中文字分割效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python元組操作實(shí)例分析【創(chuàng)建、賦值、更新、刪除等】

    Python元組操作實(shí)例分析【創(chuàng)建、賦值、更新、刪除等】

    這篇文章主要介紹了Python元組操作方法,結(jié)合具體實(shí)例形式分析了Python中元組的創(chuàng)建、賦值、更新、刪除等操作實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07

最新評論

彭山县| 平遥县| 城固县| 昌乐县| 张掖市| 青阳县| 东乡县| 遵义县| 遵义市| 获嘉县| 桐乡市| 新昌县| 南开区| 红原县| 海伦市| SHOW| 青神县| 石首市| 乌审旗| 陆良县| 汝阳县| 睢宁县| 佛学| 焦作市| 台中县| 治县。| 崇文区| 汶上县| 上林县| 栾城县| 桐柏县| 淳化县| 宁海县| 吴川市| 谢通门县| 灵宝市| 正阳县| 文昌市| 通江县| 红河县| 淮安市|