5.2
1.time包
計算機可以用來計時蝙眶,從硬件上來說愧沟,計算機主板上有一個計時的表
我們可以手動或者根據(jù)網(wǎng)絡時間來調(diào)表丁恭,這塊表有自己的電池
所以即使斷電我衬,表也不會停叹放,在硬件基礎(chǔ)上
計算機可以提供掛鐘時間(Wall Clock Time)
掛鐘時間是從某個固定時間起點到現(xiàn)在的時間間隔
對于UNIX系統(tǒng)來說饰恕,起點時間是1970年1月1日0點0分0秒
其他日期時間都是從掛鐘時間計算得到的,此外
計算機還可以測量CPU實際運行時間井仰,也就處理器時間(Processor Clock Time)
以測量計算機性能埋嵌,當CPU處于閑置狀態(tài)時,處理器時間會暫停
我們能通過py編程來管理時間和日期俱恶,標準庫time包提供了基本的時間功能
下面使用time包:
import time
print(time.time()) #掛鐘時間雹嗦,單位是秒
還能借助模塊time測量程序運行時間,比如:
import time
start = time.clock()
for i in range(100000):
print(i**2)
end = time.clock()
print(end - start) #打印19.904038合是,即CPU運行時間
上面的程序調(diào)用了兩次clock()方法了罪,從而測量鑲嵌其間的程序所用的時間
在不同的計算機系統(tǒng)上,clock()的返回值會有所不同聪全,在UNIX系統(tǒng)上
返回的是處理器時間泊藕,當CPU處于閑置狀態(tài)時,處理器時間會暫停
因此我們獲得的是CPU運行時間荔烧,在windows系統(tǒng)上吱七,返回的則是掛鐘時間
方法sleep()可以讓程序休眠,根據(jù)sleep()接受到的參數(shù)
程序會在某時間間隔之后醒來繼續(xù)運行:
import time
print("start")
time.sleep(10) #休眠10秒
print("wake up")
time包還定義了struct_time對象鹤竭,該對象將掛鐘時間轉(zhuǎn)換為年踊餐,月,日臀稚,時吝岭,分,秒等
儲存在該對象的各個屬性中吧寺,比如tm_year,tm_mon,tm_mday......
下面幾種方法可以將掛鐘時間轉(zhuǎn)換為struct_time對象:
st = time.gmtime() #返回struct_time格式的UTC時間
st = time.localtime() #返回struct_time格式的當?shù)貢r間窜管,當?shù)貢r區(qū)根據(jù)系統(tǒng)環(huán)境決定
我們也可以反過來,把一個struct_time對象轉(zhuǎn)換為time對象:
s = time.mktime(st) #將struct_time格式轉(zhuǎn)換成掛鐘時間
2.datetime包
datetime包是基于time包的一個高級包稚机,用起來更加便利
datetime可以理解為date和time兩個部分組成
date是指年月日構(gòu)成的日期幕帆,相當于日歷,time是指時分秒毫秒
構(gòu)成的一天24個小時中的具體時間赖条,提供了與手表類似的功能
因此失乾,datetime模塊下有兩個類:datetime.date類和datetime.time類
你也可以把日歷和手表合在一起使用,即直接調(diào)用datetime.datetime類
這里只介紹綜合性的datetime.datetime類纬乍,單獨的datetime.date類和datetime.time類與之類似
一個時間點碱茁,比如2012年9月3日21時30分,我們可以用如下方式表達:
import datetime
t = datetime.datetime(2012,9,3,21,30)
print(t)
2012-09-03 21:30:00
對象t具有如下屬性:
hour,minute,second,millisecond,microsecond
小時仿贬,分纽竣,秒,毫秒,微秒
year,month,day,weekday
年蜓氨,月聋袋,日,星期幾
借助datetime包语盈,我們還可以進行時間間隔的運算
它包含一個專門代表時間間隔對象的類舱馅,即timedelta
一個datetime.datetime的時間點加上一個時間間隔
就可以得到一個新的時間點,比如今天的上午3點加上5個小時
就可以得到一個時間間隔:
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) #打印2012-09-03 21:40:00
print(t + delta2) #打印2012-09-24 21:30:00
print(t_next - t) #打印2 days, 2:00:00
在給datetime.timedelta傳遞參數(shù)時刀荒,除了上面的秒(seconds)
和星期(weeks)外代嗤,還可以是天(days),小時(hours)缠借,毫秒(milliseconds)
微秒(microseconds)
兩個datetime對象能進行比較運算干毅,以確定哪個時間間隔更長
比如使用的t和t_next:
print(t>t_next) #打印False
3.時間格式
對于包含有時間信息的字符串來說,我們可以借助datetime包
把它轉(zhuǎn)換為datetime類的對象泼返,比如:
from datetime import datetime
str = "output-1997-12-23-030000.txt"
format = "output-%Y-%m-%d-%H%M%S.txt"
t = datetime.strptime(str,format)
print(t) #打印1997-12-23 03:00:00
包含有時間信息的字符串是"output-1997-12-23-030000.txt"
是一個文件名硝逢,字符串format定義了一個格式
這個格式中包含了幾個由%引領(lǐng)的特殊字符,用來代表不同時間信息
%Y表示年份绅喉,%m表示月渠鸽,%d表示日,%H表示24小時制的小時柴罐,%M表示分徽缚,%S表示秒
通過strptime方法,py會把需要解析的字符串往格式上湊
比如說革屠,在格式中%Y的位置凿试,正好看到"1997",就認為1997是datetime對象t的年
以此類推,就從字符串中獲得了t對象的時間信息
反過來似芝,我們也可以調(diào)用datetime對象的strftime方法
將一個datetime對象轉(zhuǎn)換為特定格式的字符串那婉,比如:
from datetime import datetime
format = "%Y-%m-%d %H:%M"
t = datetime(2012,9,5,23,30)
print(t.strftime(format)) #打印2012-09-05 23:30
可以看到,格式化轉(zhuǎn)化的關(guān)鍵是%號引領(lǐng)的特殊符號
這些特殊符號有很多種党瓮,分別代表不同的時間信息详炬,常用的特殊符號還有:
%A:表示英文的星期幾,如Sunday,Monday...
%a:簡寫的英文星期幾寞奸,如Sun,Mon...
%I:表示小時痕寓,12小時制
%p:上午或者下午,即AM或PM
%f:表示毫秒蝇闭,如2,0014硬毕,000001
但如果想在格式中表達%這個字符本身呻引,而不是特殊符號,那么可以使用%%