Python 快速教程(標準庫02):時間與日期 (time, datetime包)

發表於2015-11-08

Python具有良好的時間和日期管理功能。實際上,計算機只會維護一個掛鐘時間(wall clock time),這個時間是從某個固定時間起點到現在的時間間隔。時間起點的選擇與計算機相關,但一臺計算機的話,這一時間起點是固定的。其它的日期資訊都是從這一時間計算得到的。此外,計算機還可以測量CPU實際上執行的時間,也就是處理器時間(processor clock time),以測量計算機效能。當CPU處於閒置狀態時,處理器時間會暫停。

 

time包

time包基於C語言的庫函式(library functions)。Python的直譯器通常是用C編寫的,Python的一些函式也會直接呼叫C語言的庫函式。

 

time.sleep()可以將程式置於休眠狀態,直到某時間間隔之後再喚醒程式,讓程式繼續執行。

當我們需要定時地檢視程式執行狀態時,就可以利用該方法。

 

time包還定義了struct_time物件。該物件實際上是將掛鐘時間轉換為年、月、日、時、分、秒……等日期資訊,儲存在該物件的各個屬性中(tm_year, tm_mon, tm_mday…)。下面方法可以將掛鐘時間轉換為struct_time物件:

 

datetime包

1) 簡介

datetime包是基於time包的一個高階包, 為我們提供了多一層的便利。

datetime可以理解為date和time兩個組成部分。date是指年月日構成的日期(相當於日曆),time是指時分秒微秒構成的一天24小時中的具體時間(相當於手錶)。你可以將這兩個分開管理(datetime.date類,datetime.time類),也可以將兩者合在一起(datetime.datetime類)。由於其構造大同小異,我們將只介紹datetime.datetime類。

比如說我現在看到的時間,是2012年9月3日21時30分,我們可以用如下方式表達:

所返回的t有如下屬性:

hour, minute, second, microsecond

year, month, day, weekday   # weekday表示周幾

 

2) 運算

datetime包還定義了時間間隔物件(timedelta)。一個時間點(datetime)加上一個時間間隔(timedelta)可以得到一個新的時間點(datetime)。比如今天的上午3點加上5個小時得到今天的上午8點。同理,兩個時間點相減會得到一個時間間隔。

在給datetime.timedelta傳遞引數(如上的seconds和weeks)的時候,還可以是days, hours, milliseconds, microseconds。

 

兩個datetime物件還可以進行比較。比如使用上面的t和t_next:

 

3) datetime物件與字串轉換

假如我們有一個的字串,我們如何將它轉換成為datetime物件呢?

一個方法是用上一講的正規表示式來搜尋字串。但時間資訊實際上有很明顯的特徵,我們可以用格式化讀取的方式讀取時間資訊。

strptime, p = parsing
我們通過format來告知Python我們的str字串中包含的日期的格式。在format中,%Y表示年所出現的位置, %m表示月份所出現的位置……。

反過來,我們也可以呼叫datetime物件的strftime()方法,來將datetime物件轉換為特定格式的字串。比如上面所定義的t_next,

strftime, f = formatting

具體的格式寫法可參閱官方文件。 如果是Linux系統,也可查閱date命令的手冊($man date),兩者相通。

 

總結

時間,休眠

datetime, timedelta

格式化時間

相關文章