python的time模块使用
????????本章介紹python的時間模塊 time的常用函數使用。time、datetime 和 calendar模塊都是python在時間日期方面使用得最多的模塊。而對于 time模塊,用的最多的函數是這5個: time.sleep、time.time()、time.strftime、time.strptime 和 time.perf_counter()?。各種函數大家可以通過更改電腦的時間去測試,親自去實踐會更容易理解。
目錄
1.??time.localtime()
2.??time.ctime()
3.??time.time()
4.??time.strftime()
5.??time.strptime()
6.??time.perf_counter()
7.??time.sleep()
8.??time.gmtime()
9.??time.asctime()
10.? time.mktime()
結尾
| 1 | time.localtime() | 獲取本地時間。返回時間元組(按照系統設置的時區獲取) |
| 2 | time.ctime() | 獲取本地時間(返回字符串,內容不符合中國人習慣) |
| 3√ | time.time() | 獲取當前時間戳 |
| 4√ | time.strftime | 把時間元組/元組轉換成字符串 |
| 5√ | time.strptime | 把字符串格式轉換成時間元組 |
| 6√ | time.perf_counter() | 用于開始/結束的計時 |
| 7√ | time.sleep | 設置睡眠時間 |
| 8 | time.gmtime() | 獲取經度0°的時間,utc時區,返回時間元組(英國格林尼治時間) |
| 9 | time.asctime | 獲取指定時間的字符串。返回結果和time.ctime()格式一樣,不符合中國人習慣 |
| 10 | time.mktime | 返回時間戳。(可指定時間) |
1.??time.localtime(seconds)
????????獲取本地時間。返回時間元組(按照系統設置的時區獲取)
import time a = time.localtime() print(a)? ? ? ? 當不輸入seconds參數時,返回當前系統的時間;當輸入seconds時,返回指定seconds的時間,seconds為時間戳,不能為負數。后續會詳細介紹時間戳,或者看我 “時間戳” 篇更詳細。
????????現在的時間是2023年4月18日14點14分,在圖1中可看出,time.localtime()輸出了年月日時分秒,還有星期幾(tm_wday +1)、處于一年中的第幾天(tm_yday)、是否夏令時(tm_isdst)。
? ? ? ? 因為電腦算 tm_wday是從0開始的,星期一為0,0為星期一,所以在 tm_wday基礎上+1才是實際上的星期幾。而經過測試(把電腦時間改成1月1日后運行發現),tm_yday是從1開始的,所以 tm_yday是正確的,無需+1。
????????夏令時,目前中國不使用,0表示當前時間不是夏令時。這個概念最早誕生于歐洲,英國建筑師威廉·維萊特最早提出 “日光節約時間制” ,即提倡到晚上把時間 “撥” 快一小時,意識上人們就會早睡,減少照明量,從而節約更多能源。后經實行,每年節約6400萬磅蠟燭。但是由于智能手機時代的到來,夏令時開始沒落。中國在1986年也曾實行過一段時間的夏令時,但由于國情、智能化時代等原因,沒有明顯效果,到1992年,中國夏令時時代結束。
2.??time.ctime(seconds)
? ? ? ? 獲取本地時間(返回字符串,不太符合中國人習慣)
a = time.ctime() print(a)? ? ? ? 當不輸入seconds參數時,返回本地時間;當輸入seconds時,返回指定seconds的時間,seconds為時間戳,不能為負數。后續會詳細介紹時間戳,或者看我 “時間戳” 篇更詳細。
? ? ? ? 中國人的習慣是 年 月 日 時 分 秒 星期,但是返回的是 星期 月 日 時 分 秒 年。該函數很少用到,實在想要用它的,可以用.split()分隔把它提取。
3.??time.time()
????????獲取當前時間戳。
a = time.time() print(a)????????時間戳,定義為從經度0°的英國格林尼治1970年1月1日0時0分0秒起算,到現在所經過的秒數。因為中國在東八區,比格林尼治早8個小時,當格林尼治0點時,中國已經是8點了,所以對于中國地區,時間戳就是從北京時間1970年1月1日8時0分0秒起算,到現在所經過的秒數。
? ? ? ? 時間戳是有 “耗盡” 的一天的,按照32位的時間戳存儲結構,它能正確表示的秒數最大為2147483647(2的31次方,第一位是符號位),即到英國格林尼治時間 2038年1月19日03:14:07秒,也就是北京時間 2038年1月19日11:14:07秒。屆時所有32位的設備和32位的程序都會受到嚴重的影響。目前的辦法是加速64位的普及,及時對32位設備和程序進行退役,減少經濟損失。希望隨著科技的日新月異,科學家們也能找到完美過渡內核溢出的方法。
擴展資料(來自百度百科-2038年問題):
????????C語言中用 time_t 來代表時間和日期,python是基于母語C語言開發的。在32位系統上,time_t能表示的最大值為0x7ffffffff,當time_t取最大值時表示系統時間為2038-01-19 03:14:07,當時間再往后走時,由于32位整型溢出,時間將會被“繞回”(wrap around)成一個負數,變成了第 -2147483648 秒(代表格林尼治時間1901年12月13日20:45:52),造成應用程序發生嚴重的時間錯誤,而無法運行。
????????對于服務器和最新電腦,已經換成了64系統操作系統,2038年時間戳的問題將不復存在。而對于嵌入式設備來說,現在還有大量32位系統在全球各地運行,誰也無法保證這些系統在2038年之前就能光榮退役。另外對于64位操作系統,上面還會運行著32位的應用程序,它的2038年問題一樣對人們造成威脅,不可小視。
4.??time.strftime(format, tuple)
????????把時間元組/元組轉換成字符串。這兩種形式我們分別實驗:
? ? ? ? (1)把時間元組轉換成字符串:
a = time.localtime() b = time.strftime('%Y/%m/%d %H:%M:%S',a) # 把時間元組轉換成字符串 print(a) print(b) print(type(b))? ? ? ? (2)把元組轉換成字符串:
a = (2023,1,1,19,13,34,0,0,0) b = time.strftime('%Y/%m/%d %H:%M:%S',a) # 把元組轉換成字符串 print(a) print(b) print(type(b))? ? ? ? 輸入元組時,內容為9個元素,因為元組里分別對應 <年 月 日 時 分 秒 星期幾 一年中第幾天 是否夏令時> 這9個量的值,最后3位未知可填0,不填則會報錯。
? ? ? ? %Y表示年,%m表示月,%d表示日,%H表示時,%M表示分,%S表示秒。中間可以用任意英文標點符號隔開,如 / : 空格等,但目前不支持中文及中文符號。
5.??time.strptime(string, format)
????????把字符串格式轉換成時間元組
a = '2023/4/18 19:37:56' b = time.strptime(a,'%Y/%m/%d %H:%M:%S') print(b)? ? ? ? 轉成時間元組去查看指定時間是 <星期幾> 或者 <一年中的第幾天> 是不是很簡單勒!
6.??time.perf_counter()
????????用于開始/結束的計時。(計算某程序的運行要長時間)
a = time.perf_counter()ss = 0 for i in range(1,100001):ss += i print('1到100000的總和為:',ss)b = time.perf_counter() print('計算所用時間:',b-a)? ? ? ? 可見,計算1到100000的總和所需時間是0.008875秒,time.perf_counter()就是如此精確。
7.??time.sleep(seconds)
????????設置睡眠時間,使程序暫停一段時間后再繼續運行,不能為負數。
a = time.perf_counter()ss = 0 for i in range(1,100001):ss += i print('1到100000的總和為:',ss)time.sleep(5)b = time.perf_counter() print('計算所用時間:',b-a)? ? ? ? 該程序運行到 time.sleep()時,暫停5秒后再繼續執行下面的操作。該函數看似作用不大,但在爬蟲領域,它的作用卻不可無,暫停一段時間再爬,就不會給對方服務器造成太大壓力。
8.??time.gmtime(seconds)
????????獲取經度0°的時間,utc時區,返回時間元組(即返回英國格林尼治時間)
a = time.gmtime() print(a)? ? ? ? 目前時間為2023年4月18日20點12分,輸出時間為2023年4月18日12點12分,足足少了8個小時。這是由于上面第3.我們說到的時差,英國格林尼治時間比中國所在的東八區時間晚8個小時,輸出的正是英國格林尼治時間。
? ? ? ? 參數seconds為時間戳,不能為負數,關于時間戳上面第3.也有詳細解釋。當不輸入參數時,默認輸出當前格林尼治時間;當輸入指定時間戳時,輸出指定時間戳的格林尼治時間,如:
a = time.gmtime(1686213456) print(a)? ? ? ? 時間戳1686213456秒為英國格林尼治時間2023年6月8日37分36秒。若想要得到北京時間,+8小時即可。
9.??time.asctime(tuple)
????????獲取指定時間的字符串。返回結果和 time.ctime()格式一樣,不符合中國人的使用習慣。
a = time.asctime() # 和time.ctime()一樣 print(a)tup = (2023,5,19,11,22,45,0,0,0) b = time.asctime(tup) print(b)? ? ? ? 當不輸入參數時,結果和 time.ctime()一樣;當輸入一個元組時,返回元組中的指定時間,元組和第4.一樣,內容為9個元素,缺一報錯。該函數用得比較少。
10.? time.mktime(tuple)
????????返回指定時間的時間戳。可輸入時間元組或元組。
a = time.localtime() # 獲得當前時間的時間元組 print(a) b = time.mktime(a) # 傳入當前時間的時間元組 print(b) tup = (2023,5,19,11,22,45,0,0,0) c = time.mktime(tup) # 傳入元組 print(c)? ? ? ? 如b,獲得當前時間的時間元組,和 time.time()一樣;如c,獲得指定時間的時間元組,元組的元素個數也需要是9個,缺一報錯。
結尾
????????time模塊常用函數只有time.sleep、time.time()、time.strftime、time.strptime 和 time.perf_counter() ,其他幾乎很少用到。然而,在time模塊中,最不可或缺的只有睡眠time.sleep、時間戳time.time()和計時time.perf_counter(),因為其他幾乎都是用datetime庫更方便,或是同等方便,但首先想到的會是datetime,time占的 “股份”不太多,工作中使用的具體時間、日期與字符串的互相轉換如下,其中dt為datetime.datetime:
該圖片來源網絡總結
以上是生活随笔為你收集整理的python的time模块使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年模架行业如何乘风破浪?看行业知
- 下一篇: pgsql数据替换替换换行符