溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解析python內置時間模塊

發(fā)布時間:2021-10-21 10:31:29 來源:億速云 閱讀:148 作者:柒染 欄目:開發(fā)技術

如何解析python內置時間模塊,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。


無參數(shù)函數(shù)

先解釋一下時間戳,所謂時間戳,即自1970年1月1日00:00:00所經歷的秒數(shù),然后就可以理解下面的函數(shù)了。下面代碼默認

from time import *


implementationmonotonicadjustableresolution
'time'GetSystemTimeAsFileTime()FalseTrue0.015625
'thread_time'GetThreadTimes()TrueFalse1e-07
'process_time'GetProcessTimes()TrueFalse1e-07
'monotonic'GetTickCount64()TrueFalse0.015625
'perf_counter'QueryPerformanceCounter()TrueFalse1e-07

上面五組函數(shù)中,只有time.time()的值具有絕對的意義,其他值都只具有相對的意義。

通過get_clock_info函數(shù)可以查看這些時鐘的特性,其輸入輸出分別為


implementationmonotonicadjustableresolution
'time'GetSystemTimeAsFileTime()FalseTrue0.015625
'thread_time'GetThreadTimes()TrueFalse1e-07
'process_time'GetProcessTimes()TrueFalse1e-07
'monotonic'GetTickCount64()TrueFalse0.015625
'perf_counter'QueryPerformanceCounter()TrueFalse1e-07

其中,

  • 如果時鐘可以自動更改或由系統(tǒng)管理員手動更改,則adjustable為True,否則為False。

  • implementation表示用于獲取時鐘值的基礎C函數(shù)的名稱。

  • 如果時鐘不能倒退,則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_timeprocess_time并未發(fā)生變化,即二者不計算線程或者進程休眠時的時間。

一般在time模塊中,最常用的兩個函數(shù)分別是time.time()time.sleep(),前者用于獲取時間戳,從而統(tǒng)計程序運行時長;后者則可以暫停線程。

可以通過time.thread_time()來檢測sleep函數(shù)的功能

>>> 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)

時區(qū)概念

接下來需要介紹一些有關時間的概念

GMT:即格林威治標準時間。

UTC:世界協(xié)調時間,比格林威治更精確。

DST:D即Daylight,表示夏令時。

CST:美國、澳大利亞、中國、古巴的標準時間。

知道這些時區(qū)的概念之后,就能理解time中的常量:

常量altzonedaylighttznametimezone

時區(qū)偏移如未定義非DST時區(qū),則為0時區(qū)名稱本地時區(qū)偏移

struct_time

為了更好地表示時間,time中封裝了struct_time類,其成員包括

索引屬性含義
0tm_year正整數(shù)
1tm_monrange [1, 12]
2tm_mdayrange [1, 31]月中的日期
3tm_hourrange [0, 23]
4tm_minrange [0, 59]
5tm_secrange [0, 61]
6tm_wdayrange [0, 6],周一為 0星期即
7tm_ydayrange [1, 366]在一年中的第幾天
8tm_isdst0, 1 或 -1是否為DST
-tm_zone時區(qū)名稱的縮寫
-tm_gmtoff以秒為單位的UTC以東偏離

在了解struct_time這一數(shù)據結構之后,就能讀懂下列函數(shù)。


單參函數(shù)
gmtime(secs)將時間戳轉化為UTC時間[struct_time格式]
localtime(secs)將戳轉化為本地時間[struct_time格式]
ctime(secs)將時間戳轉化為UTC時間字符串
asctime(secs)將時間結構體轉化為本地時間字符串
mktimelocaltime的反函數(shù),將struct_time轉為秒數(shù)

time.strftime(format[, t])

可以將struct_time通過匹配符進行格式化輸出,其轉換格式為

名稱含意名稱含意
%a星期的縮寫%A星期的名稱
%b月份縮寫%B月份名稱
%c適當?shù)娜掌诤蜁r間表示

%d月中日,范圍[01,31]%j年中日,范圍[001,366]
%H小時,范圍[00,23]%I小時,范圍[01,12]
%M分鐘,范圍[00,59]%S秒,范圍[00,61]
%pAM 或 PM

%m月份,范圍[01,12]

%U年中周數(shù),范圍[00,53]
周日作為第一天
%W同左,周一作為第一天
%w周中日,范圍[0(星期日),6]

%x適當?shù)娜掌诒硎?/td>%X適當?shù)臅r間表示
%y無世紀年份,范圍[00,99]%Y帶世紀的年份
%z時區(qū)偏移

%Z時區(qū)名稱

%%字面的 ‘%' 字符。

strptime()為其反函數(shù)。

例如

>>> 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內置時間模塊的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI