您好,登錄后才能下訂單哦!
time庫與datetime庫怎么在python項目中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
python語言使用內置time庫和datetime庫來處理日期時間
相關術語的解釋
UTC time Coordinated Universal Time,世界協調時,又稱 格林尼治天文時間、世界標準時間。與UTC time對應的是各個時區的local time,東N區的時間比UTC時間早N個小時,因此UTC time + N小時 即為東N區的本地時間;而西N區時間比UTC時間晚N個小時,即 UTC time - N小時 即為西N區的本地時間; 中國在東8區,因此比UTC時間早8小時,可以以UTC+8進行表示。
epoch time 表示時間開始的起點;它是一個特定的時間,不同平臺上這個時間點的值不太相同,對于Unix而言,epoch time為 1970-01-01 00:00:00 UTC。
timestamp(時間戳) 也稱為Unix時間 或 POSIX時間;它是一種時間表示方式,表示從格林尼治時間1970年1月1日0時0分0秒開始到現在所經過的毫秒數,其值為float類型。 但是有些編程語言的相關方法返回的是秒數(Python就是這樣),這個需要看方法的文檔說明。需要說明的是時間戳是個差值,其值與時區無關。
以time庫為例,調用其它庫類似
from time import * (*代表time包含所有的時間處理函數,用到某個也可單定義,調用函數時直接使用,比如:clock()) import time (調用函數方式,比如:time.clock()) import time as t (自定義庫的名稱,調用時方便,比如:t.clock())
以上面第三種庫調用方式舉例
1.時間獲取:t.time();t.ctime();t.gmtime() #每種獲取時間不一樣,根據需求使用
2.程序計時:t.clock();t.perf_counter() #使用方式一樣
3.時間格式化:t.strftime(format,t);t.strptime(string,format)
#format表示要定義的格式,t表示獲取的時間,string表示字符串類型時間
字符串格式化:%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(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)
打印結果:
C:\Users\86185\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/86185/PycharmProjects/untitled/Python復習/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模塊主要用于時間訪問和轉換,這個模塊提供了各種與時間相關的函數。
方法/屬性 | 描述 |
---|---|
time.altzone | 返回與utc時間的時間差,以秒為單位(西區該值為正,東區該值為負)。其表示的是本地DST 時區的偏移量,只有daylight非0時才使用。 |
time.clock() | 返回當前進程所消耗的處理器運行時間秒數(不包括sleep時間),值為小數;該方法Python3.3改成了time.process_time() |
time.asctime([t]) | 將一個tuple或struct_time形式的時間(可以通過gmtime()和localtime()方法獲取)轉換為一個24個字符的時間字符串,格式為: "Fri Aug 19 11:14:16 2016"。如果參數t未提供,則取localtime()的返回值作為參數。 |
time.ctime([secs]) | 功能同上,將一個秒數時間戳表示的時間轉換為一個表示當前本地時間的字符串。如果參數secs沒有提供或值為None,則取time()方法的返回值作為默認值。ctime(secs)等價于asctime(localtime(secs)) |
time.time() | 返回時間戳(自1970-1-1 0:00:00 至今所經歷的秒數) |
time.localtime([secs]) | 返回以指定時間戳對應的本地時間的 struct_time對象(可以通過下標,也可以通過 .屬性名 的方式來引用內部屬性)格式 |
time.localtime(time.time() + n*3600) | 返回n個小時后本地時間的 struct_time對象格式(可以用來實現類似crontab的功能) |
time.gmtime([secs]) | 返回指定時間戳對應的utc時間的 struct_time對象格式(與當前本地時間差8個小時) |
time.gmtime(time.time() + n*3600) | 返回n個小時后utc時間的 struct_time對象(可以通過 .屬性名 的方式來引用內部屬性)格式 |
time.strptime(time_str, time_format_str) | 將時間字符串轉換為struct_time時間對象,如:time.strptime('2017-01-13 17:07', '%Y-%m-%d %H:%M') |
time.mktime(struct_time_instance) | 將struct_time對象實例轉換成時間戳 |
time.strftime(time_format_str[, struct_time_instance]) | 將struct_time對象實例轉換成字符串,如果struct_time_instance不指定則取當前本地時間對應的time_struct對象 |
datetime庫是基于time庫進行了封裝;以import datetime as dt 為datetime庫調用方式
1.date:表示的是日期對象 #dt.date
2.time;表示的是時間對象 #dt.time ;一般不用date和time函數,datetime函數包含其功能
3.datetime:表示的是日期時間對象#dt.datetime.now()表示獲取當前時間;dt.strftime(format) # 按照 format 進行格式化輸出
4.timedelta:主要用于定義計算時間跨度 #t=dt.timedelat(hours=10)表示定義時間跨度是10小時
用分隔符'''分類展示如下:
import datetime as dt now = dt.datetime.now() # 獲取當前datetime print(now) 輸出結果: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) 輸出結果: 2020-12-23 year: 2020 month: 12 day: 23 ''' ''' date1=dt.date(2020,12,23) timedel=dt.timedelta(days=4)#表示時間跨度為4天 print('四天后的日期是:', date1+timedel) 輸出結果:四天后的日期是:2020-12-27 '''
最后配上一段小程序:文本進度條打印程序分析
import time scale = 100 #這個可以隨意設置,看需求 print("執行開始".center(scale//2,'-'))# .center(a,'b')函數是居中符,這條程序是將“執行開始”居中占字符為scale//2(可看需求自定義),b為填充符 starttime = time.clock() #time庫內置函數,第一次使用是開始計時 for i in range(scale+1): a = '*' * i #將'*'字符隨i的增加而增加 b = '.' * (scale - i) #將'.'字符隨‘*'增加而減少,兩個字符總數是scale的初始值數量 c = (i/scale) * 100 #求百分比 t = time.clock()-starttime #計算時間,第二次調用time.clock函數表示計時結束 print("\r{:^3.0f}%[{}->{}]{:.2}s".format(c,a,b,t),end="")#字符格式化,看需求,自己玩就是咋好看咋格式化 time.sleep(0.05) #time.sleep()函數表示讓程序休眠,里面參數是休眠時間根據需求隨意定義 print("\n"+"執行結束".center(scale//2,'-'))#同上;"\n表示換行打印";"+"連接符,具有連接功能
關于datetime模塊的datetime類會在下面做詳細講解,這里簡單說下time.struct_time。
time.struct_time包含如下屬性:
下標/索引 | 屬性名稱 | 描述 |
---|---|---|
0 | tm_year | 年份,如 2017 |
1 | tm_mon | 月份,取值范圍為[1, 12] |
2 | tm_mday | 一個月中的第幾天,取值范圍為[1-31] |
3 | tm_hour | 小時, 取值范圍為[0-23] |
4 | tm_min | 分鐘,取值范圍為[0, 59] |
5 | tm_sec | 秒,取值范圍為[0, 61] |
6 | tm_wday | 一個星期中的第幾天,取值范圍為[0-6],0表示星期一 |
7 | tm_yday | 一年中的第幾天,取值范圍為[1, 366] |
8 | tm_isdst | 是否為夏令時,可取值為:0 , 1 或 -1 |
屬性值的獲取方式有兩種:
可以把它當做一種特殊的有序不可變序列通過 下標/索引 獲取各個元素的值,如t[0]
也可以通過 .屬性名 的方式來獲取各個元素的值,如t.tm_year。
需要說明的是struct_time實例的各個屬性都是只讀的,不可修改。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。