Python時(shí)間操作之pytz模塊使用詳解
前言
在我們?nèi)粘I钪?,時(shí)間概念常伴我們左右。讓我們簡(jiǎn)單的回憶一下自己的一天,大致有以下時(shí)間點(diǎn):
- 8:00,清晨的陽光照射到床頭伴著鬧鐘,你從睡眠中清醒
- 8:30,你洗漱完成換好工裝,出門上班
- 9:00,準(zhǔn)時(shí)坐到工位上,開始一天的工作
- 12:00,吃午飯午休
- 14:00,開始下午的工作
- ....,時(shí)間無處不在,在我們?nèi)粘逃?jì)劃中占著標(biāo)志flag的角色
假設(shè),同事突然問你Moscow城市,現(xiàn)在幾點(diǎn)了啦。這時(shí)候我們要經(jīng)過時(shí)區(qū)的換算的一系列麻煩的過程
有沒有更快的方法計(jì)算出指定時(shí)區(qū)的時(shí)間?----答案肯定有
在學(xué)習(xí)Python過程中,我們已經(jīng)了解了一些關(guān)于時(shí)間操作的庫,如:
- Python內(nèi)置庫:time,datatime,calendar,zoneinfo
- 第三方庫:dateutil,pytz,arrow
關(guān)于Python時(shí)間操作內(nèi)置庫,大家可以訪問往期內(nèi)容。本期,我們來重點(diǎn)學(xué)習(xí)一下pytz模塊的使用方法,Let's go~~
1. pytz 模塊概述
什么是 pytz 模塊
pytz 模塊是依賴Olson tz數(shù)據(jù)庫導(dǎo)入的,它支持直接使用時(shí)區(qū)名進(jìn)行時(shí)間計(jì)算
pytz 模塊涉及時(shí)區(qū),因此其也指定tzinfo信息(詳情可見datetime.tzinfo)
pytz 模塊通常與datetime模塊結(jié)合一起使用,返回具體的時(shí)間名
pytz 模塊可以解決夏令時(shí)結(jié)束時(shí)不明確的問題
重要說明:
pytz 模塊支持大多數(shù)的時(shí)區(qū)計(jì)算,使用IANA的數(shù)據(jù)接口,CLDR(Unicode 語言環(huán)境)項(xiàng)目提供翻譯
本地還需要按照依賴是時(shí)區(qū)映射表tzdata數(shù)據(jù)庫(pip install tzdata)
國家時(shí)區(qū)映射關(guān)系表
國家/城市代碼映射表,pytz庫中存儲(chǔ)在_CountryTimezoneDict()
字典中
我們可以通過 pytz.country_timezones常量來獲取code,timezon
<pytz._CountryTimezoneDict object at 0x00000256FBE52E30>
pytz 模塊使用方法
由于pytz是第三方庫,因此我們?cè)谑褂们靶枰褂胮ip進(jìn)行下載其依賴庫
pip install pytz
代碼中使用時(shí),我們需要使用import來進(jìn)行導(dǎo)入
# 方式一:導(dǎo)入整個(gè)模塊 import pytz # 方式二:導(dǎo)入具體的庫 from pytz import timezone
2. pytz 相關(guān)方法
pytz 模塊包含國家碼查詢、時(shí)區(qū)名等方法
創(chuàng)建本地化時(shí)間:
方式一:pytz.timezone(tzname).localise()
tz = pytz.timezone('US/Eastern') local_time =tz.localize(datetime.datetime(2022, 6, 13,23, 0, 0)) print(local_time)
方式二:local_time.astimezone(tzname)
ast = local_time.astimezone(tz)
方式三:tz.normzlize()處理夏令時(shí)
nor = tz.normzlize(datetime.datetime(2022, 6, 13,23, 0, 0))
時(shí)區(qū)名獲?。?/p>
- 時(shí)區(qū)名各式化:pytz.timezone(tzname)
- 獲取所有的時(shí)區(qū):pytz.country_timezones.values()
- 獲取地區(qū)的代碼:pytz.country_timezones.keys()
3. pytz 時(shí)區(qū)查詢
根據(jù)pytz模塊相關(guān)方法,我們可以寫一個(gè)函數(shù)來實(shí)現(xiàn)場(chǎng)景:
- 輸入一個(gè)城市:city,如"Simferopol"
- 輸出城市的時(shí)區(qū)偏離量:如+3
實(shí)現(xiàn)思路,大致如下:
- 首先調(diào)用pytz.country_timezones.values()獲取到所有的時(shí)區(qū)timezones
- 使用split()將時(shí)區(qū)的城市名進(jìn)行分割形成列表city_list
- 先在city_list.index[city]找到City_index
- 然后根據(jù)City_index在timezones找到時(shí)區(qū)tzname
- pytz.timezone(tzname)格式化,算出標(biāo)準(zhǔn)時(shí)間
import pytz from datetime import datetime def timezon_city_gmt(city): timezons = sum(list(pytz.country_timezones.values()),[]) cityList = [city.split("/")[1] for city in timezons] city_index = cityList.index(city) tz = pytz.timezone(timezons[city_index]) gmt = "GMT" + str(datetime.now().astimezone(tz))[-6:] return gmt print(timezon_city_gmt("Simferopol")) --- GMT+03:00 ---
4. pytz 日期計(jì)算
同理,我們?nèi)粘I钪懈鶕?jù)當(dāng)?shù)貢r(shí)間,算出對(duì)方所在時(shí)區(qū)的當(dāng)?shù)貢r(shí)間,思路與上述大致一樣。
datetime.strptime()將時(shí)間字符串轉(zhuǎn)化成datetime對(duì)象
import pytz from datetime import datetime def update_datetime_tz(olddatetime, city, formate): timezons = sum(list(pytz.country_timezones.values()), []) cityList = [city.split("/")[1] for city in timezons] city_index = cityList.index(city) tz = pytz.timezone(timezons[city_index]) datetime_type = datetime.strptime(olddatetime, formate) newdatetime = datetime_type.astimezone(tz) return newdatetime.strftime(str(formate)) print(update_datetime_tz("2022-06-13 12:46:03","Moscow","%Y-%m-%d %H:%M:%S")) --- 2022-06-13 07:46:03 ---
總結(jié)
本期我們對(duì)時(shí)間操作的pytz模塊進(jìn)行基本的了解和學(xué)習(xí)。pytz模塊可以幫助我們快速進(jìn)行時(shí)區(qū)計(jì)算出時(shí)間,pytz模塊具有tzinfo特性。
到此這篇關(guān)于Python時(shí)間操作之pytz模塊使用詳解的文章就介紹到這了,更多相關(guān)Python pytz模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中dump與dumps實(shí)現(xiàn)序列化
這篇文章就來介紹python中dump與dumps實(shí)現(xiàn)序列化,文章將圍繞dump與dumps實(shí)現(xiàn)序列化展開內(nèi)容且簡(jiǎn)精,需要的朋友可以參考一下,希望對(duì)你有所幫助2021-10-10python的numpy模塊實(shí)現(xiàn)邏輯回歸模型
這篇文章主要為大家詳細(xì)介紹了python的numpy模塊實(shí)現(xiàn)邏輯回歸模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07PyCharm MySQL可視化Database配置過程圖解
這篇文章主要介紹了PyCharm MySQL可視化Database配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Keras使用ImageNet上預(yù)訓(xùn)練的模型方式
這篇文章主要介紹了Keras使用ImageNet上預(yù)訓(xùn)練的模型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05python使用 HTMLTestRunner.py生成測(cè)試報(bào)告
這篇文章主要介紹了python使用 HTMLTestRunner.py生成測(cè)試報(bào)告 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10