python語(yǔ)言time庫(kù)和datetime庫(kù)基本使用詳解
今天是邊復(fù)習(xí)邊創(chuàng)作博客的第三天,我今年大二,我們專業(yè)開(kāi)的有這門課程,因?yàn)橄矚g所以更加認(rèn)真學(xué)習(xí),本以為沒(méi)人看呢,看了后臺(tái)瀏覽量讓我更加認(rèn)真創(chuàng)作,這篇博客花了2個(gè)半小時(shí)的時(shí)間,結(jié)合自己所學(xué),所思,所想寫(xiě)作,目的是為了方便喜歡Python的小白學(xué)習(xí),也是一種自我鞭策吧!
python語(yǔ)言使用內(nèi)置time庫(kù)和datetime庫(kù)來(lái)處理日期時(shí)間
相關(guān)術(shù)語(yǔ)的解釋
- UTC time Coordinated Universal Time,世界協(xié)調(diào)時(shí),又稱 格林尼治天文時(shí)間、世界標(biāo)準(zhǔn)時(shí)間。與UTC time對(duì)應(yīng)的是各個(gè)時(shí)區(qū)的local time,東N區(qū)的時(shí)間比UTC時(shí)間早N個(gè)小時(shí),因此UTC time + N小時(shí) 即為東N區(qū)的本地時(shí)間;而西N區(qū)時(shí)間比UTC時(shí)間晚N個(gè)小時(shí),即 UTC time - N小時(shí) 即為西N區(qū)的本地時(shí)間; 中國(guó)在東8區(qū),因此比UTC時(shí)間早8小時(shí),可以以UTC+8進(jìn)行表示。
- epoch time 表示時(shí)間開(kāi)始的起點(diǎn);它是一個(gè)特定的時(shí)間,不同平臺(tái)上這個(gè)時(shí)間點(diǎn)的值不太相同,對(duì)于Unix而言,epoch time為 1970-01-01 00:00:00 UTC。
- timestamp(時(shí)間戳) 也稱為Unix時(shí)間 或 POSIX時(shí)間;它是一種時(shí)間表示方式,表示從格林尼治時(shí)間1970年1月1日0時(shí)0分0秒開(kāi)始到現(xiàn)在所經(jīng)過(guò)的毫秒數(shù),其值為float類型。 但是有些編程語(yǔ)言的相關(guān)方法返回的是秒數(shù)(Python就是這樣),這個(gè)需要看方法的文檔說(shuō)明。需要說(shuō)明的是時(shí)間戳是個(gè)差值,其值與時(shí)區(qū)無(wú)關(guān)。
調(diào)用庫(kù)的三種方式:
以time庫(kù)為例,調(diào)用其它庫(kù)類似
from time import * (*代表time包含所有的時(shí)間處理函數(shù),用到某個(gè)也可單定義,調(diào)用函數(shù)時(shí)直接使用,比如:clock()) import time (調(diào)用函數(shù)方式,比如:time.clock()) import time as t (自定義庫(kù)的名稱,調(diào)用時(shí)方便,比如:t.clock())
time庫(kù)的主要的三類函數(shù):
以上面第三種庫(kù)調(diào)用方式舉例
1.時(shí)間獲?。簍.time();t.ctime();t.gmtime() #每種獲取時(shí)間不一樣,根據(jù)需求使用
2.程序計(jì)時(shí):t.clock();t.perf_counter() #使用方式一樣
3.時(shí)間格式化:t.strftime(format,t);t.strptime(string,format)
#format表示要定義的格式,t表示獲取的時(shí)間,string表示字符串類型時(shí)間
字符串格式化:%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)
4.程序休眠:t.sleep()
#使用舉例 import time as t t0=t.gmtime() print(t0) t1="2020-12-23 19:23:20" t2 = t.strptime(t1,"%Y-%m-%d %H:%M:%S") t3 = t.strftime("%y/%m/%d %H:%M:%S") print(t2) print(t3)
打印結(jié)果:
C:\Users\86185\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/86185/PycharmProjects/untitled/Python復(fù)習(xí)/hk.py
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=23, tm_hour=12, tm_min=22, tm_sec=39, tm_wday=2, tm_yday=358, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=23, tm_hour=19, tm_min=23, tm_sec=20, tm_wday=2, tm_yday=358, tm_isdst=-1)
20/12/23 20:22:39Process finished with exit code 0
time模塊主要用于時(shí)間訪問(wèn)和轉(zhuǎn)換,這個(gè)模塊提供了各種與時(shí)間相關(guān)的函數(shù)。
方法/屬性 | 描述 |
---|---|
time.altzone | 返回與utc時(shí)間的時(shí)間差,以秒為單位(西區(qū)該值為正,東區(qū)該值為負(fù))。其表示的是本地DST 時(shí)區(qū)的偏移量,只有daylight非0時(shí)才使用。 |
time.clock() | 返回當(dāng)前進(jìn)程所消耗的處理器運(yùn)行時(shí)間秒數(shù)(不包括sleep時(shí)間),值為小數(shù);該方法Python3.3改成了time.process_time() |
time.asctime([t]) | 將一個(gè)tuple或struct_time形式的時(shí)間(可以通過(guò)gmtime()和localtime()方法獲取)轉(zhuǎn)換為一個(gè)24個(gè)字符的時(shí)間字符串,格式為: "Fri Aug 19 11:14:16 2016"。如果參數(shù)t未提供,則取localtime()的返回值作為參數(shù)。 |
time.ctime([secs]) | 功能同上,將一個(gè)秒數(shù)時(shí)間戳表示的時(shí)間轉(zhuǎn)換為一個(gè)表示當(dāng)前本地時(shí)間的字符串。如果參數(shù)secs沒(méi)有提供或值為None,則取time()方法的返回值作為默認(rèn)值。ctime(secs)等價(jià)于asctime(localtime(secs)) |
time.time() | 返回時(shí)間戳(自1970-1-1 0:00:00 至今所經(jīng)歷的秒數(shù)) |
time.localtime([secs]) | 返回以指定時(shí)間戳對(duì)應(yīng)的本地時(shí)間的 struct_time對(duì)象(可以通過(guò)下標(biāo),也可以通過(guò) .屬性名 的方式來(lái)引用內(nèi)部屬性)格式 |
time.localtime(time.time() + n*3600) | 返回n個(gè)小時(shí)后本地時(shí)間的 struct_time對(duì)象格式(可以用來(lái)實(shí)現(xiàn)類似crontab的功能) |
time.gmtime([secs]) | 返回指定時(shí)間戳對(duì)應(yīng)的utc時(shí)間的 struct_time對(duì)象格式(與當(dāng)前本地時(shí)間差8個(gè)小時(shí)) |
time.gmtime(time.time() + n*3600) | 返回n個(gè)小時(shí)后utc時(shí)間的 struct_time對(duì)象(可以通過(guò) .屬性名 的方式來(lái)引用內(nèi)部屬性)格式 |
time.strptime(time_str, time_format_str) | 將時(shí)間字符串轉(zhuǎn)換為struct_time時(shí)間對(duì)象,如:time.strptime('2017-01-13 17:07', '%Y-%m-%d %H:%M') |
time.mktime(struct_time_instance) | 將struct_time對(duì)象實(shí)例轉(zhuǎn)換成時(shí)間戳 |
time.strftime(time_format_str[, struct_time_instance]) | 將struct_time對(duì)象實(shí)例轉(zhuǎn)換成字符串,如果struct_time_instance不指定則取當(dāng)前本地時(shí)間對(duì)應(yīng)的time_struct對(duì)象 |
datetime庫(kù)主要的四類函數(shù):
datetime庫(kù)是基于time庫(kù)進(jìn)行了封裝;以import datetime as dt 為datetime庫(kù)調(diào)用方式
1.date:表示的是日期對(duì)象 #dt.date
2.time;表示的是時(shí)間對(duì)象 #dt.time ;一般不用date和time函數(shù),datetime函數(shù)包含其功能
3.datetime:表示的是日期時(shí)間對(duì)象#dt.datetime.now()表示獲取當(dāng)前時(shí)間;dt.strftime(format) # 按照 format 進(jìn)行格式化輸出
4.timedelta:主要用于定義計(jì)算時(shí)間跨度 #t=dt.timedelat(hours=10)表示定義時(shí)間跨度是10小時(shí)
用分隔符'''分類展示如下:
import datetime as dt now = dt.datetime.now() # 獲取當(dāng)前datetime print(now) 輸出結(jié)果:2019-05-07 16:28:07.198690 ''' d = dt.date(2020, 12, 23) print(d) print('year:', d.year) print('month:', d.month) print('day:', d.day) 輸出結(jié)果: 2020-12-23 year: 2020 month: 12 day: 23 ''' ''' date1=dt.date(2020,12,23) timedel=dt.timedelta(days=4)#表示時(shí)間跨度為4天 print('四天后的日期是:', date1+timedel) 輸出結(jié)果:四天后的日期是:2020-12-27 '''
最后配上一段小程序:文本進(jìn)度條打印程序分析
import time scale = 100 #這個(gè)可以隨意設(shè)置,看需求 print("執(zhí)行開(kāi)始".center(scale//2,'-'))# .center(a,'b')函數(shù)是居中符,這條程序是將“執(zhí)行開(kāi)始”居中占字符為scale//2(可看需求自定義),b為填充符 starttime = time.clock() #time庫(kù)內(nèi)置函數(shù),第一次使用是開(kāi)始計(jì)時(shí) for i in range(scale+1): a = '*' * i #將'*'字符隨i的增加而增加 b = '.' * (scale - i) #將'.'字符隨‘*'增加而減少,兩個(gè)字符總數(shù)是scale的初始值數(shù)量 c = (i/scale) * 100 #求百分比 t = time.clock()-starttime #計(jì)算時(shí)間,第二次調(diào)用time.clock函數(shù)表示計(jì)時(shí)結(jié)束 print("\r{:^3.0f}%[{}->{}]{:.2}s".format(c,a,b,t),end="")#字符格式化,看需求,自己玩就是咋好看咋格式化 time.sleep(0.05) #time.sleep()函數(shù)表示讓程序休眠,里面參數(shù)是休眠時(shí)間根據(jù)需求隨意定義 print("\n"+"執(zhí)行結(jié)束".center(scale//2,'-'))#同上;"\n表示換行打印";"+"連接符,具有連接功能
關(guān)于datetime模塊的datetime類會(huì)在下面做詳細(xì)講解,這里簡(jiǎn)單說(shuō)下time.struct_time。
time.struct_time包含如下屬性:
下標(biāo)/索引 | 屬性名稱 | 描述 |
---|---|---|
0 | tm_year | 年份,如 2017 |
1 | tm_mon | 月份,取值范圍為[1, 12] |
2 | tm_mday | 一個(gè)月中的第幾天,取值范圍為[1-31] |
3 | tm_hour | 小時(shí), 取值范圍為[0-23] |
4 | tm_min | 分鐘,取值范圍為[0, 59] |
5 | tm_sec | 秒,取值范圍為[0, 61] |
6 | tm_wday | 一個(gè)星期中的第幾天,取值范圍為[0-6],0表示星期一 |
7 | tm_yday | 一年中的第幾天,取值范圍為[1, 366] |
8 | tm_isdst | 是否為夏令時(shí),可取值為:0 , 1 或 -1 |
屬性值的獲取方式有兩種:
- 可以把它當(dāng)做一種特殊的有序不可變序列通過(guò) 下標(biāo)/索引 獲取各個(gè)元素的值,如t[0]
- 也可以通過(guò) .屬性名 的方式來(lái)獲取各個(gè)元素的值,如t.tm_year。
需要說(shuō)明的是struct_time實(shí)例的各個(gè)屬性都是只讀的,不可修改。
到此這篇關(guān)于python語(yǔ)言time庫(kù)和datetime庫(kù)基本使用詳解的文章就介紹到這了,更多相關(guān)python time庫(kù)和datetime庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python編程深度學(xué)習(xí)繪圖庫(kù)之matplotlib
今天小編就為大家分享一篇關(guān)于Python編程深度學(xué)習(xí)繪圖庫(kù)之matplotlib,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12python 實(shí)現(xiàn)將多條曲線畫(huà)在一幅圖上的方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)將多條曲線畫(huà)在一幅圖上的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求)
這篇文章主要介紹了Django防御csrf攻擊的實(shí)現(xiàn)方式(包括ajax請(qǐng)求),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python實(shí)現(xiàn)將字典內(nèi)容保存到Excel文件的四種方法
Python 中的字典是一個(gè)數(shù)據(jù)集合,其中每個(gè)值對(duì)應(yīng)一個(gè)鍵,它們是無(wú)序的、可變的,并且對(duì)字典中存儲(chǔ)的值和鍵的數(shù)據(jù)類型沒(méi)有限制,本文給大家介紹了Python實(shí)現(xiàn)將字典內(nèi)容保存到Excel文件的四種方法,需要的朋友可以參考下2024-07-07對(duì)pyqt5中QTabWidget的相關(guān)操作詳解
今天小編就為大家分享一篇對(duì)pyqt5中QTabWidget的相關(guān)操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06詳解Selenium如何實(shí)現(xiàn)獲取cookies并保存
這篇文章主要為大家詳細(xì)介紹了Selenium如何實(shí)現(xiàn)獲取cookies保存起來(lái)用于下次訪問(wèn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-05-05Python中OpenCV實(shí)現(xiàn)簡(jiǎn)單車牌字符切割
本文將結(jié)合實(shí)例代碼,在Jupyter Notebook上使用Python+opencv實(shí)現(xiàn)如下簡(jiǎn)單車牌字符切割。感興趣的小伙伴可以參考一下2021-06-06