在動畫片哆啦A夢里,有一集機器貓發(fā)明了時間機器。通過這個機器,可以在過去、現(xiàn)在、未來中穿梭,十分神奇。
這節(jié)課,我們學(xué)習(xí)一下用python怎么操作時間,顯示過去、現(xiàn)在、未來的時刻。
我們知道時間是由 年月日時分秒來組成的,比如這個時間:2018-08-28 13:56:10
。為了讓我們的時間能夠比較清楚的顯示,我們需要約定一個固定的格式顯示時間。比如我們舉的例子里,8月份雖然只占了一位,但是為了表示清楚,我們用08來嚴(yán)格固定月份的位置。
這樣我們的時間就可以用:年年年年-月月-日日 時時-分分-秒秒
來組成了,我們經(jīng)常會有英文的縮寫來表達:YYYY-mm-dd HH:MM:SS
。
那我們對時間能做哪些操作呢?
定義一個時間
將時間按照某個格式輸出
更改一個時間的天、小時等
比較時間大小
我們來看看用python怎么實現(xiàn)這些操作!
獲取當(dāng)前時間
from datetime import datetimenow = datetime.now()print('now =', now)
注意看我們打印的結(jié)果:year-month-day hour:minute:second.microsecond
定義一個指定時間的日期
dt = datetime(2015, 4, 19, 12, 20)print('dt =', dt)
我們通過調(diào)用datetime函數(shù),函數(shù)參數(shù)分別傳入:年、月、日、時、分、秒來定義一個指定的時間。(后面的部分不傳代表零分零秒等)
獲取時分秒
datetime獲取的時間會返回一個時間對象,我們可以從里面獲取對應(yīng)的:年、月、日、時、分、秒;只需要調(diào)用對應(yīng)的:now.year now.month now.day now.hour now.minute now.second
即可。
datetime的日期部分和時間部分
我們知道,一個具體的時間包括:年月日的日期和時分秒的時間。這個用python里的:date、time 兩個對象來表示。
print(dt.date())print(dt.time())
增加時間 減少時間
我們?nèi)绻胱寱r間前進一天或者后退一小時,可以使用 timedelta
模塊。先看代碼:
from datetime import datetime, timedeltacday = datetime.now()print('current datetime =', cday)print('current + 10 hours =', cday + timedelta(hours=10))print('current - 1 day =', cday - timedelta(days=1))print('current + 2.5 days =', cday + timedelta(days=2, hours=12))
我們可以直接使用類似數(shù)學(xué)加減的方式來增加時間和減少時間。注意timedelta方法的參數(shù),因為我們可以更改的部分很多(年月日時分秒),所以我們可以使用指定參數(shù)名的方式只填入要更改的部分。
日期的顯示方式有很多,比如:2018-08-28 13:56:10
、2018年08月28日13點56分10秒
、08月28日13點
。在python里,可以使用datetime的strftime函數(shù)來格式化一個時間,看代碼:
cday = datetime.now()print('strftime:', cday.strftime('%a, %b %d %H:%M'))
程序會輸出:strftime: Mon, Jun 01 18:19
strftime方法里傳入的參數(shù)就是我們想要讓日期展示的樣子。%a, %b %d %H:%M
是日期的格式化字符。完整的格式化信息如下:
%y 兩位數(shù)的年份表示(00-99)
%Y 四位數(shù)的年份表示(000-9999)
%m 月份(01-12)
%d 月內(nèi)中的一天(0-31)
%H 24小時制小時數(shù)(0-23)
%I 12小時制小時數(shù)(01-12)
%M 分鐘數(shù)(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應(yīng)的日期表示和時間表示
%j 年內(nèi)的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(shù)(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(shù)(00-53)星期一為星期的開始
%x 本地相應(yīng)的日期表示
%X 本地相應(yīng)的時間表示
%Z 當(dāng)前時區(qū)的名稱
我們知道,python里有只有數(shù)字和字符串兩種基礎(chǔ)類型,那像這種年月日時分秒的日期是怎么表示的呢?
python和其他大多數(shù)編程語言一樣,用一個數(shù)字來代表時間。數(shù)字時間精確到毫秒。0就代表 1970年1月1日 00:00:00。我們怎么從一個數(shù)字構(gòu)建一個日期呢?看代碼:
# 把timestamp轉(zhuǎn)換為datetime:t = dt.timestamp(1535455200)print('timestamp -> datetime:', datetime.fromtimestamp(t))# 把datetime轉(zhuǎn)換為timestamp:print('datetime -> timestamp:', dt.timestamp())
我們使用timestamp
函數(shù)從時間戳獲取時間;用timestamp
函數(shù)獲取日期對應(yīng)的時間戳。
python對日期處理的函數(shù)較多,我們可以按照自己想做的事情找對應(yīng)的方法,不應(yīng)死記硬背每個函數(shù)。
在講時間戳的時候,我們說0代表的時間是: 1970年1月1日 00:00:00,這是電腦的unix系統(tǒng)(linux、osx系統(tǒng)的前身)在發(fā)布的時候定義的起始時間。這個時間也叫做紀(jì)元時間(epoch time)。