您好,登錄后才能下訂單哦!
如何解析python內置時間模塊,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
先解釋一下時間戳,所謂時間戳,即自1970年1月1日00:00:00所經歷的秒數,然后就可以理解下面的函數了。下面代碼默認
from time import *
implementation | monotonic | adjustable | resolution | |
---|---|---|---|---|
'time' | GetSystemTimeAsFileTime() | False | True | 0.015625 |
'thread_time' | GetThreadTimes() | True | False | 1e-07 |
'process_time' | GetProcessTimes() | True | False | 1e-07 |
'monotonic' | GetTickCount64() | True | False | 0.015625 |
'perf_counter' | QueryPerformanceCounter() | True | False | 1e-07 |
上面五組函數中,只有time.time()的值具有絕對的意義,其他值都只具有相對的意義。
通過get_clock_info函數可以查看這些時鐘的特性,其輸入輸出分別為
implementation | monotonic | adjustable | resolution | |
---|---|---|---|---|
'time' | GetSystemTimeAsFileTime() | False | True | 0.015625 |
'thread_time' | GetThreadTimes() | True | False | 1e-07 |
'process_time' | GetProcessTimes() | True | False | 1e-07 |
'monotonic' | GetTickCount64() | True | False | 0.015625 |
'perf_counter' | QueryPerformanceCounter() | True | False | 1e-07 |
其中,
如果時鐘可以自動更改或由系統管理員手動更改,則adjustable為True,否則為False。
implementation表示用于獲取時鐘值的基礎C函數的名稱。
如果時鐘不能倒退,則monotonic為 True,否則為 False 。
resolution表示以秒為單位的時鐘分辨率。
接下來可以測試一下這些時鐘的特性。
>>> def test(n): ... aTime = time.time() ... aTh = time.thread_time() ... aPr = time.process_time() ... aMo = time.monotonic() ... aPe = time.perf_counter() ... for i in range(int(n)): j = i**2 ... bTime = time.time() ... bTh = time.thread_time() ... bPr = time.process_time() ... bMo = time.monotonic() ... bPe = time.perf_counter() ... aStr = f'aTime={aTime},aTh={aTh},aPr={aPr},aMo={aMo},aPe={aPe}\n' ... bStr = f'bTime={bTime},bTh={bTh},bPr={bPr},bMo={bMo},bPe={bPe}' ... print(aStr+bStr) ... >>> test(1e6) aTime=1634625786.136904,aTh=0.03125,aPr=0.03125,aMo=199082.078,aPe=199085.4751224 bTime=1634625786.340363,bTh=0.234375,bPr=0.234375,bMo=199082.281,bPe=199085.6787309 >>> test(1e6) aTime=1634625789.7817287,aTh=0.234375,aPr=0.234375,aMo=199085.734,aPe=199089.1195357 bTime=1634625789.981198,bTh=0.421875,bPr=0.421875,bMo=199085.921,bPe=199089.3195721 >>> test(1e6) aTime=1634625796.3934195,aTh=0.421875,aPr=0.421875,aMo=199092.343,aPe=199095.731209 bTime=1634625796.5789576,bTh=0.609375,bPr=0.609375,bMo=199092.531,bPe=199095.9172852 >>>
可清晰地看到,在調用test
的間隔中,thread_time
和process_time
并未發生變化,即二者不計算線程或者進程休眠時的時間。
一般在time
模塊中,最常用的兩個函數分別是time.time()
和time.sleep()
,前者用于獲取時間戳,從而統計程序運行時長;后者則可以暫停線程。
可以通過time.thread_time()
來檢測sleep
函數的功能
>>> def test(n): ... aTime = time.time() ... aTh = time.thread_time() ... aPr = time.process_time() ... time.sleep(n) ... bTime = time.time() ... bTh = time.thread_time() ... bPr = time.process_time() ... aStr = f'aTime={aTime},aTh={aTh},aPr={aPr}\n' ... bStr = f'bTime={bTime},bTh={bTh},bPr={bPr}' ... print(aStr+bStr) ... >>> test(1) aTime=1634649370.2819958,aTh=0.640625,aPr=0.640625 bTime=1634649371.2862759,bTh=0.640625,bPr=0.640625 >>> test(1) aTime=1634649372.72013,aTh=0.640625,aPr=0.640625 bTime=1634649373.723695,bTh=0.640625,bPr=0.640625 >>> test(1)
接下來需要介紹一些有關時間的概念
GMT
:即格林威治標準時間。
UTC
:世界協調時間,比格林威治更精確。
DST
:D即Daylight,表示夏令時。
CST
:美國、澳大利亞、中國、古巴的標準時間。
知道這些時區的概念之后,就能理解time
中的常量:
常量 | altzone | daylight | tzname | timezone |
---|---|---|---|---|
時區偏移 | 如未定義非DST時區,則為0 | 時區名稱 | 本地時區偏移 |
為了更好地表示時間,time
中封裝了struct_time
類,其成員包括
索引 | 屬性 | 值 | 含義 |
---|---|---|---|
0 | tm_year | 正整數 | 年 |
1 | tm_mon | range [1, 12] | 月 |
2 | tm_mday | range [1, 31] | 月中的日期 |
3 | tm_hour | range [0, 23] | 時 |
4 | tm_min | range [0, 59] | 分 |
5 | tm_sec | range [0, 61] | 秒 |
6 | tm_wday | range [0, 6],周一為 0 | 星期即 |
7 | tm_yday | range [1, 366] | 在一年中的第幾天 |
8 | tm_isdst | 0, 1 或 -1 | 是否為DST |
- | tm_zone | 時區名稱的縮寫 | |
- | tm_gmtoff | 以秒為單位的UTC以東偏離 |
在了解struct_time這一數據結構之后,就能讀懂下列函數。
單參函數 | |
---|---|
gmtime(secs) | 將時間戳轉化為UTC時間[struct_time格式] |
localtime(secs) | 將戳轉化為本地時間[struct_time格式] |
ctime(secs) | 將時間戳轉化為UTC時間字符串 |
asctime(secs) | 將時間結構體轉化為本地時間字符串 |
mktime | localtime的反函數,將struct_time轉為秒數 |
可以將struct_time
通過匹配符進行格式化輸出,其轉換格式為
名稱 | 含意 | 名稱 | 含意 |
---|---|---|---|
%a | 星期的縮寫 | %A | 星期的名稱 |
%b | 月份縮寫 | %B | 月份名稱 |
%c | 適當的日期和時間表示 | ||
%d | 月中日,范圍[01,31] | %j | 年中日,范圍[001,366] |
%H | 小時,范圍[00,23] | %I | 小時,范圍[01,12] |
%M | 分鐘,范圍[00,59] | %S | 秒,范圍[00,61] |
%p | AM 或 PM | ||
%m | 月份,范圍[01,12] | ||
%U | 年中周數,范圍[00,53] 周日作為第一天 | %W | 同左,周一作為第一天 |
%w | 周中日,范圍[0(星期日),6] | ||
%x | 適當的日期表示 | %X | 適當的時間表示 |
%y | 無世紀年份,范圍[00,99] | %Y | 帶世紀的年份 |
%z | 時區偏移 | ||
%Z | 時區名稱 | ||
%% | 字面的 ‘%' 字符。 |
strptime()
為其反函數。
例如
>>> t = time.strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) >>> t 'Tue, 19 Oct 2021 13:46:37 +0000' >>> T = time.strptime(t,"%a, %d %b %Y %H:%M:%S +0000") >>> T time.struct_time(tm_year=2021, tm_mon=10, tm_mday=19, tm_hour=13, tm_min=46, tm_sec=37, tm_wday=1, tm_yday=292, tm_isdst=-1)
看完上述內容,你們掌握如何解析python內置時間模塊的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。