摘要:最近開發(fā)過程中遇到這樣一個(gè)問題在使用模塊獲取當(dāng)前時(shí)間之后與程序中某些時(shí)間操作會(huì)報(bào)錯(cuò)這個(gè)我就有點(diǎn)納悶了怎么會(huì)報(bào)這個(gè)錯(cuò)誤呢然后我開始搜資料原來在有兩種時(shí)間類型和沒有表明時(shí)區(qū)的時(shí)間如有時(shí)區(qū)的時(shí)間如可以發(fā)現(xiàn)類型時(shí)間在打印對(duì)象信息時(shí)多了一個(gè)沒錯(cuò)這
最近開發(fā)過程中遇到這樣一個(gè)問題:
在使用datetime模塊獲取當(dāng)前時(shí)間之后,與程序中某些時(shí)間操作會(huì)報(bào)錯(cuò):
TypeError: can"t subtract offset-naive and offset-aware datetimes
這個(gè)我就有點(diǎn)納悶了,怎么會(huì)報(bào)這個(gè)錯(cuò)誤呢?然后我開始搜資料,原來在有兩種時(shí)間類型:naive和aware
naive
沒有表明時(shí)區(qū)的時(shí)間.如: datetime.datetime.now()
datetime.datetime(2019, 7, 8, 14, 13, 52, 534690)
aware
有時(shí)區(qū)的時(shí)間.如:datetime.datetime.now(pytz.utc)
datetime.datetime(2019, 7, 8, 6, 22, 16, 245504, tzinfo=)
可以發(fā)現(xiàn)aware類型時(shí)間在打印對(duì)象信息時(shí)多了一個(gè)tzinfo,沒錯(cuò),這個(gè)就是用來標(biāo)識(shí)時(shí)區(qū)的.而因?yàn)槲覀儷@取當(dāng)前的時(shí)候沒有傳入時(shí)區(qū),為naive類型,所以與有些aware時(shí)間操作會(huì)發(fā)生異常,其實(shí)解決方法也很簡(jiǎn)單,將naive轉(zhuǎn)化為aware類型就好了,怎樣轉(zhuǎn)化呢?我找到了這幾種方式:
方式一datetime.datetime.now().replace(tzinfo=pytz.utc)方式二
datetime.datetime.now(pytz.utc)方式三
pytz.utc.localize(datetime.datetime.now())
而第二種生成方式是在創(chuàng)建時(shí)間的時(shí)候指定時(shí)間,其他兩種可以用來轉(zhuǎn)化/修改時(shí)區(qū).寫了這么多,你們肯定在疑惑一個(gè)東西:pytz
這是一個(gè)時(shí)區(qū)模塊,用來在python中進(jìn)行一個(gè)時(shí)區(qū)的相關(guān)操作.其提供的對(duì)象方法為
__all__ = [ "timezone", "utc", "country_timezones", "country_names", "AmbiguousTimeError", "InvalidTimeError", "NonExistentTimeError", "UnknownTimeZoneError", "all_timezones", "all_timezones_set", "common_timezones", "common_timezones_set", ]
接下來我們一個(gè)個(gè)介紹:
timezone:傳入一個(gè)時(shí)區(qū),如:Asia/Shanghai,返回一個(gè)時(shí)區(qū)對(duì)象
pytz.timezone("Asia/Shanghai") >>>
utc: 返回一個(gè)utc時(shí)區(qū)對(duì)象
pytz.utc >>>
country_timezones:傳入一個(gè)國(guó)家英文縮寫,返回?fù)碛械臅r(shí)區(qū),如:中國(guó)("CN"),不傳則返回由247個(gè)國(guó)家縮寫為key,時(shí)區(qū)為值的dict
pytz.country_timezones("CN") >>> [u"Asia/Shanghai", u"Asia/Urumqi"]
country_names:拿一個(gè)國(guó)家英文縮寫,返回國(guó)家完整英文名稱
pytz.country_names["CN"] >>> u"China"
all_timezones:所有時(shí)區(qū)的列表(591個(gè))
pytz.all_timezones >>> ["Asia/Shanghai", "Asia/Urumqi", ...] # 有591個(gè),所以還是列一下咱們國(guó)家的時(shí)區(qū)
all_timezones_set:所有時(shí)區(qū)的集合
pytz.all_timezones_set >>> {"Asia/Shanghai", "Asia/Urumqi", ...}
common_timezones:常用的時(shí)區(qū)列表(439個(gè))
pytz.common_timezones >>> ["Asia/Shanghai", "Asia/Urumqi", ...] # 有439個(gè)
common_timezones_set:常用的時(shí)區(qū)集合
pytz.common_timezones >>> {"Asia/Shanghai", "Asia/Urumqi", ...}
AmbiguousTimeError:模糊時(shí)間錯(cuò)誤
InvalidTimeError:無效時(shí)間錯(cuò)誤
NonExistentTimeError:不存在的時(shí)間錯(cuò)誤
UnknownTimeZoneError:未知的時(shí)區(qū)錯(cuò)誤
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/45113.html
摘要:沒報(bào)錯(cuò)但依然無法安裝使用再次安裝無果感謝大神的分享我才發(fā)覺這是一個(gè)新手的通用問題樹莓派自帶的系統(tǒng)附帶了一個(gè)來自前寒武紀(jì)的版本,如果您不想花費(fèi)數(shù)小時(shí)來調(diào)試與相關(guān)的問題,那么就必須升級(jí)它。 諸位, 不好意思哈, 請(qǐng)?jiān)试S我把完整的標(biāo)題寫完(標(biāo)題不能超過64個(gè)有效字符): 記一次解決樹莓派下載Django庫(kù) ——報(bào)錯(cuò)為TypeError: unsupported operand types f...
摘要:代碼實(shí)例的時(shí)間的時(shí)間輸出和相差的時(shí)長(zhǎng)輸出結(jié)果也就是說,多倫多和溫哥華有個(gè)小時(shí)的時(shí)差小屌絲我去這么牛嘛小魚這是開胃菜。代碼實(shí)例為了顯示直觀,我直接用來運(yùn)行這沒有什么難度,在前面的代碼中,也有展示。 ...
閱讀 4089·2021-10-08 10:04
閱讀 3069·2021-08-11 11:20
閱讀 2739·2021-07-25 21:37
閱讀 2689·2019-08-30 12:44
閱讀 2316·2019-08-30 11:12
閱讀 1320·2019-08-26 13:45
閱讀 2360·2019-08-26 11:53
閱讀 3066·2019-08-26 11:32