您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python中的time模塊和calendar模塊怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
在Python
中對時間和日期的處理方式有很多,其中轉換日期是最常見的一個功能。Python
中的時間間隔是以秒為單位的浮點小數。
Python
中基本都是以時間戳來保存當前時間的。時間戳單位最適于做日期運算。但是1970年之前的日期就無法以此表示了。太遙遠的日期也不行,UNIX
和Windows
只支持到2038
年。
時間戳是指格林威治時間1970年01月01日00時00分00秒起至當下的總秒數。通俗的講, 時間戳是一份能夠表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。 它的提出主要是為用戶提供一份電子證據, 以證明用戶的某些數據的產生時間。
Python
中使用time
模塊的time
函數來獲取當前的時間戳
示例代碼:
import time time_stamp = time.time() print("當前的時間戳為:", time_stamp) # 當前的時間戳為: 1590585400.6808906
Python
中的很多函數都是用一個元組裝起來9組數字來處理時間。
序號 | 屬性 | 值 |
---|---|---|
0 | tm_year | 2008 |
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 (60或61 是閏秒) |
6 | tm_wday | 0到6 (0是周一) |
7 | tm_yday | 一年中的第幾天,1 到 366 |
8 | tm_isdst | 是否為夏令時,值有:1(夏令時)、0(不是夏令時)、-1(未知),默認 -1 |
參與菜鳥教程
從返回的時間戳轉變為時間元組可以使用time
模塊的localtime()
函數; time.gmtime([secs])
也返回一個時間元組
示例代碼:
import time time_stamp = time.time() # 獲取當前時間戳 localtime = time.localtime(time_stamp) print(localtime) # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=27, tm_hour=21, tm_min=36, tm_sec=42, tm_wday=2, tm_yday=148, tm_isdst=0)
可以使用time
模塊的asctime
函數將時間元組格式化為最簡單的可讀模式,不給參數的話表示當前時間
time.ctime([secs])
此參數接受時間戳為單位,返回日期的可讀模式,不給參數相當于time.asctime()
示例代碼:
import time time_stamp = time.time() localtime = time.asctime(time.localtime(time_stamp)) print("當前時間為:", localtime) # 當前時間為: Wed May 27 21:47:48 2020
Python中的日期格式化符號:
符號 | 描述 |
---|---|
%y | 兩位數的表示年份(00-99) |
%Y | 四位數的表示年份(0000-9999) |
%m | 月份(01-12) |
%d | 月內中的某一天(1-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 | 本地相應的時間表示 |
%Z | 當前時區的名稱 |
%% | %號本身 |
time mktime
(結構化的時間或者完整的9位元組元素) 函數執行與gmtime()
, localtime()
相反的操作,它接收struct_time
對象作為參數,返回用秒數來表示時間的浮點數。如果輸入的值不是一個合法的時間,將觸發 OverflowError 或 ValueError
。
示例代碼:
import time time_stamp = time.time() print(time_stamp) # 1590590683.0062041 # 4位數的年份-月份-天數 24小時制:分鐘:秒 周幾 今年的第幾天 localtime = time.strftime("%Y-%m-%d %H:%M:%S %A %j", time.localtime(time_stamp)) print(localtime) # 2020-05-27 22:44:43 Wednesday 148 # 轉變為時間元組 localtime_tuple = time.strptime(localtime, "%Y-%m-%d %H:%M:%S %A %j") print(localtime_tuple) # time.struct_time(tm_year=2020, tm_mon=5, tm_mday=27, tm_hour=22, tm_min=44, tm_sec=43, tm_wday=2, tm_yday=148, tm_isdst=-1) # 將時間元組轉換為秒(時間戳) time_stamp = time.mktime(localtime_tuple) print(time_stamp) # 1590590683.0 # 與一開始獲取的基本相等
time.perf_counter()
返回計時器的精準時間(系統的運行時間),包含整個系統的睡眠時間。由于返回值的基準點是未定義的,所以,只有連續調用的結果之間的差才是有效的。
time.process_time()
返回當前進程執行 CPU
的時間總和,不包含睡眠時間。由于返回值的基準點是未定義的,所以,只有連續調用的結果之間的差才是有效的。
time.sleep()
函數推遲調用線程的運行,可通過參數secs
指秒數,表示進程掛起的時間。
示例代碼:
import time # 獲取系統運行該函數的時間 print(time.perf_counter()) # 0.0208446 time.sleep(2) # 讀取系統運行該函數的時間, print(time.perf_counter()) # 2.0208952 # 兩者的差距微乎其微 # 獲取當前進程執行 CPU 的時間總和 print(time.process_time()) # 0.015625 # 不包含睡眠時間
Calendar
日歷模塊,此模塊中的函數都是日歷相關的,例如打印某月的字符月歷
函數 | 描述 |
---|---|
calendar.calendar(year,w=2,l=1,c=6) | 返回一個多行字符串格式的year年年歷,3個月一行,間隔距離為c。 每日寬度間隔為w字符。每行長度為21* W+18+2* C。l是每星期行數。 |
calendar.month(year,month,w=2,l=1) | 返回一個多行字符串格式的year年month月日歷,兩行標題,一周一行。每日寬度間隔為w字符。每行的長度為7* w+6。l是每星期的行數。 |
calendar.monthrange(year,month) | 返回兩個整數。第一個是該月的星期幾,第二個是該月有幾天。星期幾是從0(星期一)到 6(星期日)。 |
calendar.leapdays(y1,y2) | 返回在Y1,Y2兩年之間的閏年總數。 |
calendar.isleap(year) | 判斷是否為閏年,是閏年返回 True,否則為 false。 |
示例代碼:
import calendar # 打印今年的年歷 print(calendar.calendar(2020)) # 打印本月的月歷 print(calendar.month(2020, 5)) # monthrange方法 print(calendar.monthrange(2020, 5)) # (4, 31) # 5月份的第一天是周五一共31天,因為周一是0所以4是周五 # 計算1000年到2000年的閏年總數 print(calendar.leapdays(1000, 2000)) # 242 # 判斷今年是否為閏年 print(calendar.isleap(2020)) # True
time.strftime(fmt[,tupletime])
接收以時間元組,并返回以可讀字符串表示的當地時間,格式由fmt決定。
time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
根據fmt
的格式把一個時間字符串解析為時間元組。
關于“Python中的time模塊和calendar模塊怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。