python使用datetime.utcnow()問題解析
起步
執(zhí)行下面代碼:
import time from datetime import datetime, timezone, timedelta print(time.time()) print(datetime.utcnow().timestamp()) print(datetime.now(timezone.utc).timestamp()) print(datetime.now(timezone(timedelta(hours=2))).timestamp()) ==== output ==== 1626687759.9081082 1626658959.908108 1626687759.908108 1626687759.908108
發(fā)現(xiàn),輸出的時間戳中只有 utcnow() 是不一樣,如果對比相差的時間能發(fā)現(xiàn)正好差8小時,而我電腦所在的時區(qū)正好是東八區(qū)。
原因
正如 utcnow() 文檔 所表明的那樣,它返回的是 naive time ,Naive datetime 實(shí)例被認(rèn)為為表示本地時間,因此它的時間戳?xí)仁褂?nbsp;now(None) 相差的時間正好是該電腦所在時區(qū)。
造成這種詭異處理方式的是有歷史原因的,在 Python 2 轉(zhuǎn) Python 3 的過渡階段中,datetime.timezone 作為 3.2 版中的新功能被設(shè)計(jì)了出來,因此有了更為清晰明確的標(biāo)記日期所在的時區(qū)。舊的接口 utcnow() 則保留了原先的處理方式。
新的時區(qū)的模型的處理方式與Python 2 存在兼容問題:
==== Python 2 ==== >>> from datetime import datetime >>> from dateutil import tz >>> datetime(2021, 5, 1).astimezone(tz.UTC) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: astimezone() cannot be applied to a naive datetime ==== Python 3 ==== >>> from datetime import datetime >>> from dateutil import tz >>> datetime(2021, 5, 1).astimezone(tz.UTC) datetime.datetime(2021, 5, 1, 4, 0, tzinfo=tzutc())
總結(jié)
綜上所述, utcnow() 可能是一個常見的陷阱。
我建議不要再使用 utcnow() 和 utcfromtimestamp() 。
以上就是python使用datetime.utcnow()問題解析的詳細(xì)內(nèi)容,更多關(guān)于python datetime.utcnow()的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)aes加密解密多種方法解析
這篇文章主要介紹了Python實(shí)現(xiàn)aes加密解密多種方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
利用Anaconda創(chuàng)建虛擬環(huán)境的全過程
因?yàn)槎啻沃匦屡渲铆h(huán)境,這些命令每次都要用,每次都忘記,需要重新搜索,所以記錄這一過程,下面這篇文章主要給大家介紹了關(guān)于利用Anaconda創(chuàng)建虛擬環(huán)境的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
python復(fù)制列表時[:]和[::]之間有什么區(qū)別
這篇文章主要給大家介紹了關(guān)于python復(fù)制列表時[:]和[::]之間有什么區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報(bào)錯問題
這篇文章主要介紹了解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報(bào)錯問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

