博客專欄

EEPW首頁 > 博客 > 簡述Python培訓(xùn)之time和datetime的區(qū)別

簡述Python培訓(xùn)之time和datetime的區(qū)別

發(fā)布人:扣丁學(xué)堂 時間:2020-07-07 來源:工程師 發(fā)布文章

今天扣丁學(xué)堂給大家來詳細(xì)介紹一下Python中提供了對時間日期的多種多樣的處理方式,主要是在time和datetime這兩個模塊里。今天扣丁學(xué)堂小編給為大家整一下Pyrthon視頻教程之兩個模塊在使用上的區(qū)別。  

2.png

Python表示時間的兩種方式:  

1、時間戳(相對于1970.1.100:00:00以秒計算的偏移量),時間戳是惟一的  

2、時間元組即(struct_time),共有九個元素,分別表示,同一個時間戳的struct_time會因為時區(qū)不同而不同。  

struct_time元組共有9個元素,分別含義如下:  

tm_year(年)四位數(shù)字,如:2017  

tm_mon(月)1-12  

tm_mday(日)1-31  

tm_hour(時)0-23  

tm_min(分)0-59  

tm_sec(秒)0-61  

tm_wday(weekday)0-6(0表示周日)  

tm_yday(一年中的第幾天)1-366  

tm_isdst(是否是夏令時)默認(rèn)為-1  

time  

在Python文檔里,time是歸類在GenericOperatingSystemServices中,換句話說,它提供的功能是更加接近于操作系統(tǒng)層面的。通讀文檔可知,time模塊是圍繞著UnixTimestamp進行的。  

該模塊主要包括一個類struct_time,另外其他幾個函數(shù)及相關(guān)常量。需要注意的是在該模塊中的大多數(shù)函數(shù)是調(diào)用了所在平臺Clibrary的同名函數(shù),所以要特別注意有些函數(shù)是平臺相關(guān)的(如:time.clock()),可能會在不同的平臺有不同的效果。另外一點是,由于是基于UnixTimestamp,所以其所能表述的日期范圍被限定在1970-2038之間,如果你寫的代碼需要處理在前面所述范圍之外的日期,那可能需要考慮使用datetime模塊更好。  

常用方法:  

1、time.sleep(secs)#推遲指定的時間(secs)后繼續(xù)運行  

2、time.localtime([secs])#將一個時間戳轉(zhuǎn)換成一個當(dāng)前時區(qū)的struct_time,如果seconds參數(shù)未輸入,則以當(dāng)前時間為轉(zhuǎn)換標(biāo)準(zhǔn)、、,未提供secs參數(shù)時,按當(dāng)前時間為準(zhǔn)  

3、time.strftime(format[,t])#將指定的struct_time(默認(rèn)為當(dāng)前時間),根據(jù)指定的格式化字符串輸出  

4、time.time()#返回當(dāng)前時間的時間戳  

5、time.mktime(t)#將一個struct_time轉(zhuǎn)換為時間戳,如下time.localtime接收一個時間戳返回一個struct_time,而time.mktime接收一個struct_time,返回一個時間戳  

6、time.gmtime([secs])#和localtime()方法類似,gmtime()方法是將一個時間戳轉(zhuǎn)換為UTC時區(qū)(0時區(qū))的struct_time  

7、time.clock()#這個需要注意,在不同的系統(tǒng)上含義不同。在UNIX系統(tǒng)上,它返回的是“進程時間”,它是用秒表示的浮點數(shù)(時間戳)。而在WINDOWS中,第一次調(diào)用,返回的是進程運行的實際時間。而第二次之后的調(diào)用是自第一次調(diào)用以后到現(xiàn)在的運行時間。(實際上是以WIN32上QueryPerformanceCounter()為基礎(chǔ),它比毫秒表示更為精確)  

8、time.asctime([t])#把一個表示時間的元組或者struct_time表示為這種形式:'SunJun2023:21:051993'。如果沒有參數(shù),將會將time.localtime()作為參數(shù)傳入  

9、time.ctime([secs]):把一個時間戳(按秒計算的浮點數(shù))轉(zhuǎn)化為time.asctime()的形式。如果參數(shù)未給或者為None的時候,將會默認(rèn)time.time()為參數(shù)。它的作用相當(dāng)于time.asctime(time.localtime(secs))  

10、time.strftime(format[,t])#把一個代表時間的元組或者struct_time(如由time.localtime()和time.gmtime()返回)轉(zhuǎn)化為格式化的時間字符串。如果t未指定,將傳入time.localtime()。如果元組中任何一個元素越界,ValueError的錯誤將會被拋出  

代碼實例:  

>>>importtime  

使用time模塊,首先得到當(dāng)前的時間戳  

>>>time.time()  

1513855961.782587  

將時間戳轉(zhuǎn)換為時間元組struct_time  

>>>time.localtime(time.time())  

time.struct_time(tm_year=2017,tm_mon=12,tm_mday=21,tm_hour=19,tm_min=33,tm_sec=17,tm_wday=3,tm_yday=355,tm_isdst=0)  

格式化輸出想要的時間  

>>>time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))  

'2019-12-2119:33:40'  

接上文,不加參數(shù)時,默認(rèn)就是輸出當(dāng)前的時間  

>>>time.strftime('%Y-%m-%d%H:%M:%S')  

'2019-12-2119:33:53'  

使用的時候需要注意一下使用的時區(qū)。  

datetime  

datetime比time高級了不少,可以理解為datetime基于time進行了封裝,提供了更多實用的函數(shù)。在datetime模塊中包含了幾個類,具體如下:  

timedelta#主要用于計算時間跨度  

tzinfo#時區(qū)相關(guān)  

time#只關(guān)注時間  

date#只關(guān)注日期  

datetime#同時有時間和日期  

在實際實用中,用得比較多的是datetime.datetime和datetime.timedelta,另外兩個datetime.date和datetime.time實際使用和datetime.datetime并無太大差別。對于一個datetime.datetime實例,主要會有以下屬性及常用方法:  

datetime.year  

datetime.month  

datetime.day  

datetime.hour  

datetime.minute  

datetime.second  

datetime.microsecond  

datetime.tzinfo#時區(qū)  

datetime.date()#返回date對象  

datetime.time()#返回time對象  

datetime.replace(name=value)#前面所述各項屬性是read-only的,需要此方法才可更改  

datetime.timetuple()#返回time.struct_time對象  

dattime.strftime(format)#按照format進行格式化輸出  

除了實例本身具有的方法,類本身也提供了很多好用的方法:  

datetime.today()a#當(dāng)前時間,localtime  

datetime.now([tz])#當(dāng)前時間默認(rèn)localtime  

datetime.utcnow()#UTC時間  

datetime.fromtimestamp(timestamp[,tz])#由UnixTimestamp構(gòu)建對象  

datetime.strptime(date_string,format)#給定時間格式解析字符串  

使用timedelta也算是比較簡單的:  

>>>importdatetime  

>>>time_now=datetime.datetime.now()  

>>>time_now  

datetime.datetime(2019,12,21,19,35,59,129648)  

>>>time_now.strftime('%Y-%m-%d%H:%M:%S')  

'2019-12-2119:35:59'  

>>>delta=datetime.timedelta(hours=24)  

>>>print(time_now+delta)  

2019-12-2219:35:59.129648  

>>>print(time_now-delta)  

2016-10-2620:46:16.657523  

>>>print(time_now-delta)  

2019-12-2019:35:59.129648  


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉