Python具有良好的時間和日期管理功能。實際上,計算機只會維護一個掛鐘時間(wall clock time),這個時間是從某個固定時間起點到現在的時間間隔。時間起點的選擇與計算機相關,但一臺計算機的話,這一時間起點是固定的。其它的日期資訊都是從這一時間計算得到的。此外,計算機還可以測量CPU實際上執行的時間,也就是處理器時間(processor clock time),以測量計算機效能。當CPU處於閒置狀態時,處理器時間會暫停。
time包
time包基於C語言的庫函式(library functions)。Python的直譯器通常是用C編寫的,Python的一些函式也會直接呼叫C語言的庫函式。
1 2 3 |
import time print(time.time()) # wall clock time, unit: second print(time.clock()) # processor clock time, unit: second |
time.sleep()可以將程式置於休眠狀態,直到某時間間隔之後再喚醒程式,讓程式繼續執行。
1 2 3 4 |
import time print('start') time.sleep(10) # sleep for 10 seconds print('wake up') |
當我們需要定時地檢視程式執行狀態時,就可以利用該方法。
time包還定義了struct_time物件。該物件實際上是將掛鐘時間轉換為年、月、日、時、分、秒……等日期資訊,儲存在該物件的各個屬性中(tm_year, tm_mon, tm_mday…)。下面方法可以將掛鐘時間轉換為struct_time物件:
1 2 3 4 |
st = time.gmtime() # 返回struct_time格式的UTC時間 st = time.localtime() # 返回struct_time格式的當地時間, 當地時區根據系統環境決定。 s = time.mktime(st) # 將struct_time格式轉換成wall clock time |
datetime包
1) 簡介
datetime包是基於time包的一個高階包, 為我們提供了多一層的便利。
datetime可以理解為date和time兩個組成部分。date是指年月日構成的日期(相當於日曆),time是指時分秒微秒構成的一天24小時中的具體時間(相當於手錶)。你可以將這兩個分開管理(datetime.date類,datetime.time類),也可以將兩者合在一起(datetime.datetime類)。由於其構造大同小異,我們將只介紹datetime.datetime類。
比如說我現在看到的時間,是2012年9月3日21時30分,我們可以用如下方式表達:
1 2 3 |
import datetime t = datetime.datetime(2012,9,3,21,30) print(t) |
所返回的t有如下屬性:
hour, minute, second, microsecond
year, month, day, weekday # weekday表示周幾
2) 運算
datetime包還定義了時間間隔物件(timedelta)。一個時間點(datetime)加上一個時間間隔(timedelta)可以得到一個新的時間點(datetime)。比如今天的上午3點加上5個小時得到今天的上午8點。同理,兩個時間點相減會得到一個時間間隔。
1 2 3 4 5 6 7 8 |
import datetime t = datetime.datetime(2012,9,3,21,30) t_next = datetime.datetime(2012,9,5,23,30) delta1 = datetime.timedelta(seconds = 600) delta2 = datetime.timedelta(weeks = 3) print(t + delta1) print(t + delta2) print(t_next - t) |
在給datetime.timedelta傳遞引數(如上的seconds和weeks)的時候,還可以是days, hours, milliseconds, microseconds。
兩個datetime物件還可以進行比較。比如使用上面的t和t_next:
1 |
print(t > t_next) |
3) datetime物件與字串轉換
假如我們有一個的字串,我們如何將它轉換成為datetime物件呢?
一個方法是用上一講的正規表示式來搜尋字串。但時間資訊實際上有很明顯的特徵,我們可以用格式化讀取的方式讀取時間資訊。
1 2 3 4 |
from datetime import datetime format = "output-%Y-%m-%d-%H%M%S.txt" str = "output-1997-12-23-030000.txt" t = datetime.strptime(str, format) |
strptime, p = parsing
我們通過format來告知Python我們的str字串中包含的日期的格式。在format中,%Y表示年所出現的位置, %m表示月份所出現的位置……。
反過來,我們也可以呼叫datetime物件的strftime()方法,來將datetime物件轉換為特定格式的字串。比如上面所定義的t_next,
1 |
print(t_next.strftime(format)) |
strftime, f = formatting
具體的格式寫法可參閱官方文件。 如果是Linux系統,也可查閱date命令的手冊($man date),兩者相通。
總結
時間,休眠
datetime, timedelta
格式化時間