Python標(biāo)準(zhǔn)庫(kù)之日期、時(shí)間和日歷模塊
一、time時(shí)間模塊
import time
1 、時(shí)間戳:time.time()
時(shí)間戳(timestamp):時(shí)間戳表示的是從1970年1月1日00:00:00開(kāi)始按秒計(jì)算的偏移量。
時(shí)間戳單位最適于做日期運(yùn)算。但是1970年之前的日期就無(wú)法以此表示了。太遙遠(yuǎn)的日期也不行,UNIX和Windows只支持到2038年。
time_stamp = time.time() print(time_stamp, type(time_stamp)) # 1574923359.1739607 <class 'float'>
2、 格式化時(shí)間:time.strftime()
格式化的時(shí)間字符串(format string):格式化時(shí)間表示的是普通的字符串格式的時(shí)間。
format_time = time.strftime("%Y-%m-%d %X") print(format_time, type(format_time)) #2019-03-07 16:22:11 <class 'str'> # 格式化成2016-03-20 11:45:39形式 print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
python中時(shí)間日期格式化符號(hào):
- %y 兩位數(shù)的年份表示(00-99)
- %Y 四位數(shù)的年份表示(000-9999)
- %m 月份(01-12)
- %d 月內(nèi)中的一天(0-31)
- %H 24小時(shí)制小時(shí)數(shù)(0-23)
- %I 12小時(shí)制小時(shí)數(shù)(01-12)
- %M 分鐘數(shù)(00=59)
- %S 秒(00-59)
- %a 本地簡(jiǎn)化星期名稱
- %A 本地完整星期名稱
- %b 本地簡(jiǎn)化的月份名稱
- %B 本地完整的月份名稱
- %c 本地相應(yīng)的日期表示和時(shí)間表示
- %j 年內(nèi)的一天(001-366)
- %p 本地A.M.或P.M.的等價(jià)符
- %U 一年中的星期數(shù)(00-53)星期天為星期的開(kāi)始
- %w 星期(0-6),星期天為星期的開(kāi)始
- %W 一年中的星期數(shù)(00-53)星期一為星期的開(kāi)始
- %x 本地相應(yīng)的日期表示
- %X 本地相應(yīng)的時(shí)間表示
- %Z 當(dāng)前時(shí)區(qū)的名稱
- %% %號(hào)本身
3 、結(jié)構(gòu)化時(shí)間:time.localtime()
結(jié)構(gòu)化的時(shí)間(struct time):struct_time元組共有9個(gè)元素共九個(gè)元素,分別為(年,月,日,時(shí),分,秒,一年中第幾周(0是周一),一年中第幾天,夏令時(shí))
# UTC時(shí)區(qū)的struct_time: print(time.gmtime() ) # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=6, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=332, tm_isdst=0) # 本地時(shí)區(qū)的struct_time: print( time.localtime() ) # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=45, tm_sec=34, tm_wday=3, tm_yday=332, tm_isdst=0) # 獲取當(dāng)前時(shí)間 print( time.localtime(time.time()) # 結(jié)構(gòu)化時(shí)間的基準(zhǔn)時(shí)間 print(time.localtime(0) ) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) # 結(jié)構(gòu)化時(shí)間的基準(zhǔn)時(shí)間上增加一年時(shí)間 print(time.localtime(3600 * 24 * 365) ) # time.struct_time(tm_year=1971, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=1, tm_isdst=0)
4、 不同格式時(shí)間的轉(zhuǎn)換
如上圖所示,我們總能通過(guò)某些方法在結(jié)構(gòu)化時(shí)間-格式化時(shí)間-時(shí)間戳三者之間進(jìn)行轉(zhuǎn)換,下面我們將用代碼展示如何通過(guò)這些方法轉(zhuǎn)換時(shí)間格式。
# 結(jié)構(gòu)化時(shí)間 now_time = time.localtime() print(now_time) # time.struct_time(tm_year=2019, tm_mon=11, tm_mday=28, tm_hour=14, tm_min=51, tm_sec=55, tm_wday=3, tm_yday=332, tm_isdst=0) # 把結(jié)構(gòu)化時(shí)間轉(zhuǎn)換為時(shí)間戳格式 print(time.mktime(now_time)) # 1574923915.0 # 把結(jié)構(gòu)化時(shí)間轉(zhuǎn)換為格式化時(shí)間 # %Y年-%m月-%d天 %X時(shí)分秒=%H時(shí):%M分:%S秒 print(time.strftime("%Y-%m-%d %X", now_time) ) # 2019-11-28 14:51:55 # 把格式化時(shí)間化為結(jié)構(gòu)化時(shí)間,它和strftime()是逆操作 print(time.strptime('2013-05-20 13:14:52', '%Y-%m-%d %X') ) # time.struct_time(tm_year=2013, tm_mon=5, tm_mday=20, tm_hour=13, tm_min=14, tm_sec=52, tm_wday=0, tm_yday=140, tm_isdst=-1)
5、 其他用法
# 把結(jié)構(gòu)化時(shí)間表示為這種形式(24個(gè)字符的字符串):'Sun Jun 20 23:21:05 1993'。 print(time.asctime() ) # Thu Nov 28 14:51:55 2019 # 如果沒(méi)有參數(shù),默認(rèn)會(huì)將time.localtime()作為參數(shù)傳入。 print(time.asctime(time.localtime()) ) # Thu Nov 28 14:51:55 2019 # 把一個(gè)時(shí)間戳轉(zhuǎn)化為這種形式(24個(gè)字符的字符串):'Sun Jun 20 23:21:05 1993'。 print(time.ctime() ) # Thu Nov 28 14:51:55 2019 # 如果參數(shù)未給或者為None的時(shí)候,默認(rèn)會(huì)將time.time()為參數(shù)。它的作用相當(dāng)于time.asctime(time.localtime(secs))。 print(time.ctime(time.time())) # Thu Nov 28 14:51:55 2019 # 推遲指定的時(shí)間運(yùn)行,單位為秒 start = time.time() time.sleep(3) end = time.time() print(end-start) #3.0005428791046143 time.perf_counter() # 返回系統(tǒng)運(yùn)行時(shí)間 time.process_time() # 返回進(jìn)程運(yùn)行時(shí)間
二、datetime時(shí)間加減的模塊
datetime模塊可以看成是時(shí)間加減的模塊
import datetime
1、用法:
import datetime import time # 返回當(dāng)前時(shí)間 print(datetime.datetime.now() ) # 2019-11-28 15:02:23.138960 print(datetime.date.fromtimestamp(time.time()) ) # 2019-11-28 # 當(dāng)前時(shí)間+3天 print(datetime.datetime.now() + datetime.timedelta(3) ) # 2019-12-01 15:02:23.138960 # 當(dāng)前時(shí)間-3天 print(datetime.datetime.now() + datetime.timedelta(-3)) # 2019-11-25 15:02:23.138960 # 當(dāng)前時(shí)間-3小時(shí) print(datetime.datetime.now() + datetime.timedelta(hours=3) ) # 2019-11-28 18:02:23.138960 # 當(dāng)前時(shí)間+30分鐘 print(datetime.datetime.now() + datetime.timedelta(minutes=30) ) # 2019-11-28 15:32:23.138960 # 時(shí)間替換 c_time = datetime.datetime.now() print(c_time.replace(minute=20, hour=5, second=13)) # 2019-11-28 05:20:13.138960
2、常用時(shí)間處理方法
- 今天:
today = datetime.date.today()
- 昨天:
yesterday = today - datetime.timedelta(days=1)
- 上個(gè)月:
last_month = today.month - 1 if today.month - 1 else 12
- 當(dāng)前時(shí)間戳:
time_stamp = time.time()
- 時(shí)間戳轉(zhuǎn)datetime:
datetime.datetime.fromtimestamp(time_stamp)
- datetime轉(zhuǎn)時(shí)間戳:
int(time.mktime(today.timetuple()))
- datetime轉(zhuǎn)字符串:
today_str = today.strftime("%Y-%m-%d")
- 字符串轉(zhuǎn)datetime:
today = datetime.datetime.strptime(today_str, "%Y-%m-%d")
- 補(bǔ)時(shí)差:
today + datetime.timedelta(hours=8)
三、Calendar日歷模塊
Calendar模塊有很廣泛的方法用來(lái)處理年歷和月歷,例如打印某月的月歷:
import calendar cal = calendar.month(2016, 1) print ("以下輸出2016年1月份的日歷:") print (cal)
以上實(shí)例輸出結(jié)果:
以下輸出2016年1月份的日歷: January 2016 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
星期一是默認(rèn)的每周第一天,星期天是默認(rèn)的最后一天。更改設(shè)置需調(diào)用calendar.setfirstweekday()函數(shù)。
農(nóng)歷:
安裝方法:
pip install sxtwl
Windows下的二進(jìn)制安裝包:https://pan.baidu.com/s/1VR4MtPVV9iP9SSHNDjKZnQ#list/path=%2Fsxtwl
# 引入日歷庫(kù)模塊 import sxtwl # 日歷中文索引 ymc = ["十一", "臘", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十"] rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"] # 實(shí)例化日歷庫(kù) lunar = sxtwl.Lunar() # 陰歷轉(zhuǎn)陽(yáng)歷 day = lunar.getDayByLunar(2030, 3, 27, False) # 公元前的年可以用負(fù)數(shù)表示。比如公交前20年就用-20 print(u"公歷:", day.y, u"年", day.m, u"月", day.d, u"日") if day.Lleap: print(u"陰歷:潤(rùn)", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日") else: print(u"陰歷:", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日") # 同理,陽(yáng)歷轉(zhuǎn)陰歷 day = lunar.getDayBySolar(2018, 10, 20) print(u"公歷:", day.y, u"年", day.m, u"月", day.d, u"日") if day.Lleap: print(u"陰歷:潤(rùn)", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日") else: print(u"陰歷:", ymc[day.Lmc], u"月", rmc[day.Ldi], u"日")
更加詳細(xì)的使用方法請(qǐng)參考:
https://pypi.org/project/sxtwl/
到此這篇關(guān)于Python標(biāo)準(zhǔn)庫(kù)之日期、時(shí)間和日歷模塊的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
django實(shí)現(xiàn)HttpResponse返回json數(shù)據(jù)為中文
這篇文章主要介紹了django實(shí)現(xiàn)HttpResponse返回json數(shù)據(jù)為中文,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Django頁(yè)面數(shù)據(jù)的緩存與使用的具體方法
這篇文章主要介紹了Django頁(yè)面數(shù)據(jù)的緩存與使用的具體方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04簡(jiǎn)單了解python的內(nèi)存管理機(jī)制
這篇文章主要介紹了簡(jiǎn)單了解python的內(nèi)存管理機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python+pyqt5實(shí)現(xiàn)圖片批量縮放工具
這篇文章主要為大家詳細(xì)介紹了Python+pyqt5實(shí)現(xiàn)圖片批量縮放工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Python實(shí)現(xiàn)模擬錕斤拷等各類亂碼詳解
說(shuō)到亂碼問(wèn)題就不得不提到錕斤拷,這算是非常常見(jiàn)的一種亂碼形式,那么它到底是經(jīng)過(guò)何種錯(cuò)誤操作產(chǎn)生的呢?本文我們就來(lái)一步步探究2023-02-02python實(shí)現(xiàn)批量提取指定文件夾下同類型文件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量提取指定文件夾下同類型文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Python網(wǎng)絡(luò)編程實(shí)戰(zhàn)之爬蟲技術(shù)入門與實(shí)踐
這篇文章主要介紹了Python網(wǎng)絡(luò)編程實(shí)戰(zhàn)之爬蟲技術(shù)入門與實(shí)踐,了解這些基礎(chǔ)概念和原理將幫助您更好地理解網(wǎng)絡(luò)爬蟲的實(shí)現(xiàn)過(guò)程和技巧,需要的朋友可以參考下2023-04-04