Python:time與datetime


學習自:

 

(10條消息) Python的time和datetime的簡單使用_慢行的蝸牛-CSDN博客

Python之 time 與 datetime模塊 - 葉靈溪&葉仙櫻 - 博客園

python time模塊和datetime模塊詳解 - 蒼松 - 博客園

datetime官方文檔

Python 日期和時間 | 菜鳥教程

Python中有兩個模塊:timedatetime,分別是時間日期

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_timetuple轉換為字符串;如果沒有第二個參數,則默認返回當前時間
  • 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模塊對時間進行算數運算,只能將格式化strstruct_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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM