python語言time庫和datetime庫基本使用詳解
今天是邊復習邊創作博客的第三天,我今年大二,我們專業開的有這門課程,因為喜歡所以更加認真學習,本以為沒人看呢,看瞭後臺瀏覽量讓我更加認真創作,這篇博客花瞭2個半小時的時間,結合自己所學,所思,所想寫作,目的是為瞭方便喜歡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())
time庫的主要的三類函數:
以上面第三種庫調用方式舉例
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庫主要的四類函數:
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實例的各個屬性都是隻讀的,不可修改。
到此這篇關於python語言time庫和datetime庫基本使用詳解的文章就介紹到這瞭,更多相關python time庫和datetime庫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!