作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!
Python具有良好的時間和日期管理功能。實際上,計算機只會維護一個掛鍾時間(wall clock time),這個時間是從某個固定時間起點到現在的時間間隔。時間起點的選擇與計算機相關,但一台計算機的話,這一時間起點是固定的。其它的日期信息都是從這一時間計算得到的。此外,計算機還可以測量CPU實際上運行的時間,也就是處理器時間(processor clock time),以測量計算機性能。當CPU處於閑置狀態時,處理器時間會暫停。
time包
time包基於C語言的庫函數(library functions)。Python的解釋器通常是用C編寫的,Python的一些函數也會直接調用C語言的庫函數。
import time print(time.time()) # wall clock time, unit: second
print(time.clock()) # processor clock time, unit: second
time.sleep()可以將程序置於休眠狀態,直到某時間間隔之后再喚醒程序,讓程序繼續運行。
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對象:
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分,我們可以用如下方式表達:
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點。同理,兩個時間點相減會得到一個時間間隔。
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:
print(t > t_next)
3) datetime對象與字符串轉換
假如我們有一個的字符串,我們如何將它轉換成為datetime對象呢?
一個方法是用上一講的正則表達式來搜索字符串。但時間信息實際上有很明顯的特征,我們可以用格式化讀取的方式讀取時間信息。
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,
print(t_next.strftime(format))
strftime, f = formatting
具體的格式寫法可參閱官方文檔。 如果是Linux系統,也可查閱date命令的手冊($man date),兩者相通。
總結
時間,休眠
datetime, timedelta
格式化時間