python處理時間的模塊有三個:datetime,time,calendar;datetime模塊主要是用來表示日期的,就是我們常說的年月日時分秒,calendar模塊主要是用來表示年月日,是星期幾之類的信息,time模塊主要側(cè)重點在時分秒,粗略從功能來看,
我們可以認為三者是一個互補的關(guān)系,各自專注一塊。
1,time模塊
1.1 時間的獲取、表示、轉(zhuǎn)換
time模塊獲取時間的基本方法:tt = time.time() # 1559201353.5570097
得到的是時間戳,即1970年1月1日0點(時間基準點epoch)到現(xiàn)在的秒數(shù)(浮點數(shù)),用的是UTC時間。
1.2 將時間戳轉(zhuǎn)換為年月日時分秒格式
有兩個轉(zhuǎn)換方式,一個是UTC時間,一個是所在時區(qū)進行調(diào)整后的時間,得到的是struct_time
time.gmtime(tt)
st = time.localtime(tt)
#UTC時間輸出:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=7, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)
#當?shù)貢r間輸出:time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)
1.3 將struct_time轉(zhuǎn)換為秒數(shù)
calendar.timegm()方法用來把UTC的struct_time(gmtime的返回對象)轉(zhuǎn)為從epoch開始的秒數(shù)
time.mktime()用來把用時區(qū)調(diào)整過的struct_time(即localtime的返回對象)對象轉(zhuǎn)為從epoch開始的秒數(shù)
1.4 在時間和表示時間的字符串之間進行轉(zhuǎn)換
time模塊中的strftime和strptime就是做這個用的。
看名字大家就應該知道它們的含義,
strftime 即 string format time,用來將時間格式化成字符串;
strptime 即string parse time,用來將字符串解析成時間。需要注意的是,這里的時間都是struct_time對象。
ss = time.strftime(’%y/%m/%d %H:%M:%S’,st)
r# 19/05/30 15:29:13
time.strptime(ss,’%y/%m/%d %H:%M:%S’)
r# time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=-1)
1.5 簡單轉(zhuǎn)換方式
asctime用來將一個struct_time對象轉(zhuǎn)為標準24字符的字符串,如下所示:Sun Jun 20 23:21:05 1993;
ctime方法與asctime作用相同,只不過它接收的是秒數(shù),在內(nèi)部,會先把秒數(shù)通過localtime轉(zhuǎn)為struct_time,再往后就與asctime一樣了。
time.asctime(st)
time.ctime(tt)
r# Thu May 30 15:29:13 2019
2, datetime模塊
簡單說,該模塊核心的類就三個,date類表示年月日,time類表示時分秒毫秒,這里不要和time模塊搞混淆了。
2.1 創(chuàng)建datetime對象
dt=datetime.datetime.fromtimestamp(time.time())
以上,time.time()獲得自epoch開始的秒數(shù),fromtimestamp方法會將這個秒數(shù)轉(zhuǎn)變成一個datetime對象。
這個datetime對象究竟是utc的還是local的?
答案是local的,這是該方法的默認行為。如果你在fromtimestamp方法中傳入一個表示時區(qū)的參數(shù),即tzinfo對象,就會按傳入的時區(qū)信息進行轉(zhuǎn)換。
獲得表示當前l(fā)ocal時間的datetime對象,還有兩個簡便方法:
datetime. datetime. now()
datetime. datetime. today()
以上我們得到的都是local的datetime對象,如何獲得utc的datetime對象呢?
有兩個辦法:
datetime.datetime.utcfromtimestamp(time.time())
r# 2019-05-30 16:29:47.819607
datetime.datetime.utcnow()
2.2 從字符串中創(chuàng)建datetime對象
方法為datetime.striptime(date_string, format)
其內(nèi)部還是先調(diào)用的time模塊中的striptime方法,獲取struct_time對象,再利用struct_time對象中的年月日時分秒信息構(gòu)建datetime對象。
同樣的,datetime類也提供了strftime(),asctime(),ctime()方法,相信不說你也知道是做什么的了。
datetime類還提供了一個combine方法,用來將一個date對象和一個time對象組合成一個datetime對象。
需要注意的是,datetime模塊中出現(xiàn)timestamp時,一般可將其理解成time.time()返回的秒數(shù)
2.3 date和time的創(chuàng)建
date對象的創(chuàng)建和datetime非常相似,
datetime.date.today()
datetime.date.fromtimestamp()都可以創(chuàng)建一個date對象。
當然,你也可以通過構(gòu)造方法傳入年月日來創(chuàng)建date對象。
相比之下,time對象的創(chuàng)建就很有限,只能通過datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])這個方法創(chuàng)建
3,時間的加減
python中可以方便地對date對象之間,或者datetime對象之間進行小于(<)比較和減法(-)操作。
注意,這里僅限于同類對象之間,而且,不包括time對象之間。
兩個date對象作減,或者兩個datetime對象之間作減,差值用一個timedelta對象表示。
dt = datetime.datetime.fromtimestamp(time.time())
dt1 = dt - datetime.timedelta(seconds=10)
r# 2019-05-30 16:45:23.642651
r# 2019-05-30 16:45:13.642651
4,pandas中對時間的處理
數(shù)據(jù)處理中經(jīng)常遇到時間的處理,pandas也有相應的模塊。
將string轉(zhuǎn)換為時間格式:pd.to_datetime(strtime)
su = pd.to_datetime(‘2019-05-29 16:45:23’)
r# 2019-05-29 16:45:23
提取日期等信息
df[‘begintime’].dt.hour()
更多文章、技術(shù)交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
