學習自:
(10條消息) Python的time和datetime的簡單使用_慢行的蝸牛-CSDN博客
Python之 time 與 datetime模塊 - 葉靈溪&葉仙櫻 - 博客園
python time模塊和datetime模塊詳解 - 蒼松 - 博客園
Python中有兩個模塊:time與datetime,分別是時間與日期。
time
三種時間表示方法
time模塊用於時間操作,包括:
- 時間表達;
- 獲取系統時間、時間的格式化輸出;
- 精確計時;
time模塊中有3種時間表示方法:
- timestamp:時間戳;基於1970.1.1 00:00:00的偏移值。浮點數;
- struct_time類型:gmtime()和localtime()可以將timestamp顯示為struct_time()類型;
- 格式化時間:strftime()函數可以把struct_time()時間格式化顯示。
struct_time
struct_time類型也叫結構化時間,struct_time是一個tuple,其中一共9個元素:(年,月,日,時,分,秒,第幾周,第幾天,夏令時),這九個元素都是int類型。
格式為:
#訪問時可以通過 t[ tm_xxx ]的形式訪問每一項
tm_year
tm_mon
tm_mday
tm_hour
tm_min
tm_sec
tm_wday
tm_yday
tm_isdst
我們用一段程序來說明上述三種時間:
import time print(time.time()) #時間戳,float類型 print(time.strftime("%Y-%m-%d %X"))#格式化時間,string類型 print(time.localtime())#本地時區的struct_time print(time.gmtime())#UTC時區的struct_time
1622900361.6924574 2021-06-05 21:39:21 time.struct_time(tm_year=2021, tm_mon=6, tm_mday=5, tm_hour=21, tm_min=39, tm_sec=21, tm_wday=5, tm_yday=156, tm_isdst=0) time.struct_time(tm_year=2021, tm_mon=6, tm_mday=5, tm_hour=13, tm_min=39, tm_sec=21, tm_wday=5, tm_yday=156, tm_isdst=0)
格式化時間
格式化方式見下一段的第二部分的兩個函數,這里要說明格式化的寫法:
%y 兩位數的年份表示 (00-99) %Y 四位數的年份表示 (0000-9999) %m 月(01-12) %d 日(0-31) %H 24小時制小時數(0-23) %I 12小時制小時數(01-12) %M 分鍾(00-59) %S 秒(00-59) %a 星期幾,簡寫 %A 星期幾,完整 %b 月份,簡寫 %B 月份,完整 %c 本地的日期、時間表示 %j 一年第幾天 (001-366) %p 本地A.M.或P.M.等價符 %U 一年第幾周(00-53),星期天為一周開始 %w 星期幾,數字(0-6) %W 一年第幾周(00-53),星期一為一周開始 %x 本地日期 %X 本地時間,13:22:44這種形式 %Z 當前時區名稱 %% 轉義%
三種時間的關系
- timestamp:計算機認識的時間
- struct_time:程序員處理的時間
- 格式化時間:人類能看懂的時間
time模塊的三類函數
1、時間獲取:time()、ctime()、gmtime()
- time.time():當前時間戳;浮點型
- time.ctime():獲取當前時間,並以易讀的形式表示;String
- time.gmtime():計算機可處理格式,即上文提到的struct_time類型
2、時間格式化:strftime()、strptime()
- time.strftime( format [ , struct_time ] ):根據參數把一個struct_time或tuple轉換為字符串;如果沒有第二個參數,則默認返回當前時間
- time.strptime( string [ , format ] ):與strftime相反,把字符串轉換為struct_time並返回;這里的format缺省時為 "%a %b %H:%M:%S %Y"——周幾 月 時:分:秒 年
3、程序計時:sleep()、perf_counter()
- time.perf_counter():返回一個CPU級別的精准時間計時數,單位為秒;計數值不確定,連續調用取差值才有意義
- time.sleep( s ):休眠s秒
三種時間的轉化
import time print(time.time()) #timestamp -> struct_time #localtime():將一個時間戳轉換為本地的struct_time,參數缺省時默認轉化當前時間 #gmtime(time_stamp):與localtime類似,不過是UTC時間下的struct_timeprint(time.time()) print(time.localtime()) print(time.localtime(1622906297.021401)) #struct_time -> timestamp #mktime( struct_time ) print(time.localtime()) #struct_time -> format string #strftime(format [,t]) 若t未指定,默認用time.localtime() lt = time.localtime() print(lt) str_time = time.strftime("%Y-%m-%d %X") print(str_time) #format string -> struct_time
#strptime(str_time , format)
#若format缺省,默認是"%a %b %d %H:%M:%S %Y" st = time.strptime(str_time,"%Y-%m-%d %X") print(st)
雖然Timestamp和任意格式化時間字符串間不存在轉化方式,但是卻存在向某一特定格式時間字符串的轉化函數,這個特定格式就是“%a %b %d %H %M %S %Y”——“星期幾 月 日 時 分 秒 年”,即我們在上文所說的strptime函數的默認格式
import time #asctime( [struct_time] ):將一個表示時間的tuple或者struct_time表示為指定格式的時間字符串 #如果參數缺省,則默認用time.localtime() str = time.asctime()#Sat Jun 5 23:48:44 2021 #cstime( [timestamp] ):把一個timestamp轉化為指定格式的時間 #缺省時,將使用time.time()作為參數 str = time.ctime(time.time())#Sat Jun 5 23:48:44 2021
DateTime
datetime是Python中常用的時間模塊,主要是輸出格式化時間和提取屬性的功能。
datetime中的類
datetime.date | 日期,常用屬性有:year、month、day |
datetime.time | 時間,常用屬性有:hour、minute、second、microsecond |
datetime.datetime | 日期時間 |
datetime.timedelta | 兩個date、time、datetime間的時間間隔,單位可達μs |
datetime.tzinfo | 時區相關信息對象的抽象基類。它由datetime和time類使用,以提供自定義時間調賬 |
datetime.timezone | 實現tzinfo的類,表示與UTC的固定偏移量 |
datetime.datetime
- datetime.datetime.now():返回系統的當前時期
- datetime.datetime.now().date():返回當前日期
- datetime.datetime.now().time():返回當前時間
- datetime.datetime.ctime(datetime/date/time):將date、time、datetime轉化為str類型
- datetime.datetime.now().strftime('%Y-%m-%d %H:%M%S'):跟ctime類似,datetime中的各種類型轉化為字符串
- datetime.datetime.strptime( str , format ):將str轉化為指定格式的datetime類型
格式化方式與time類似,只是多了一個%f表示微秒。
datetime.timedelta
該類用於表示兩個不同時間之間的差值。如果使用time模塊對時間進行算數運算,只能將格式化str和struct_time先轉換為timestamp,然后對該timestamp加減n秒,最后再轉換為struct_time或格式化str,這顯然很不方便。而datetime.timedelta類可以讓我們方便地對date、time、datetime對象做算術運算,而且兩個時間之間的差值也更容易控制。
使用方法datetime.timedelta()添加參數,可以計算任意時間前的datetime:
import datetime timeapp = datetime.datetime.now().date() delta = datetime.timedelta(days=300)#計算300天前的時期 print(type(timeapp)) print(timeapp) print(timeapp - delta)
<class 'datetime.date'> 2021-06-06 2020-08-10
timedelta()也接受多個參數,比如300d12h前的時間:
timeapp = datetime.datetime.now() delta = datetime.timedelta(days=300,hours=12) print(timeapp) print(timeapp - delta)
2021-06-06 09:53:41.894628 2020-08-09 21:53:41.894628
計算間隔的總天數和秒數:
import datetime dlt=datetime.timedelta(days=1,hours=2) day_dlt=dlt.days second_delta=dlt.total_seconds() print(day_dlt) print(second_delta) 1 93600.0