99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀傻傻分不清楚系列 | python中各種時(shí)間處理方法(上)
傻傻分不清楚系列 | python中各種時(shí)間處理方法(上)
2020-05-25
收藏

相信大多數(shù)數(shù)據(jù)分析師在入手python的時(shí)候,在學(xué)習(xí)到time庫與datetime庫時(shí),都會(huì)對(duì)兩個(gè)庫里面長得很像,又相互有關(guān)聯(lián)的各種類和方法感到非常窩心。當(dāng)接觸到pandas處理時(shí)間序列的方法時(shí),再次發(fā)現(xiàn)其中各種類和方法又和前面兩個(gè)時(shí)間庫的方法“長得好像又似乎有點(diǎn)不同”,此時(shí),想必每個(gè)強(qiáng)迫癥學(xué)習(xí)著內(nèi)心早已經(jīng)發(fā)出“土撥鼠吶喊”。

趁著宅在家躲疫情的間隙,托福司機(jī)重新對(duì)這3塊知識(shí)內(nèi)容重新梳理,及時(shí)制止內(nèi)心的土撥鼠繼續(xù)吶喊,現(xiàn)分享給大家。

(一) time庫

1. time庫與datetime庫的關(guān)系

在 Python 文檔里,time是歸類在Generic Operating System Services中,換句話說,它提供的功能是更加接近于操作系統(tǒng)層面的。

而datetime庫比time庫高級(jí)了不少,提供了更多實(shí)用的方法,可以理解為datetime基于time進(jìn)行了封裝。

我們先看一下time庫。

time庫主要圍繞unix時(shí)間戳進(jìn)行操作,主要包含一個(gè)類:struct_time。

那什么是unix時(shí)間戳?它是指格林威治時(shí)間1970年01月01日00分00秒(北京時(shí)間1970年01月01日08時(shí)00分00秒)起至現(xiàn)在的總秒數(shù),比如格林威治時(shí)間1970年01月01日00分01秒就以數(shù)值1來記載。

time庫中只要有四個(gè)函數(shù)可以獲得時(shí)間函數(shù),其中time.time()方法就可以獲得當(dāng)前時(shí)間戳:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

比如我們想獲得當(dāng)前unix時(shí)間戳,unix時(shí)間戳以浮點(diǎn)數(shù)記載:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

獲得當(dāng)?shù)貢r(shí)區(qū)的unix時(shí)間戳:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

這里我們會(huì)發(fā)現(xiàn),上面的unix時(shí)間戳不再以浮點(diǎn)數(shù)記載,而是struct_time對(duì)象,里面一共記載了九個(gè)時(shí)間元素,分別是年月日時(shí)分秒,tm_wday是這周的第幾天(周一是0),tm_yday是這年的第幾天,tm_isdst是夏令時(shí)。

除此以外,time.localtime()還可以把unix時(shí)間戳轉(zhuǎn)化為struct_time格式:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

2. struct_time對(duì)象的格式化

time庫中對(duì)時(shí)間進(jìn)行格式化的方法主要是通過time.strftime()方法,基本用法如下:

l time.strftime(tpl,ts)

§ tpl:格式化模塊字符串,用來定義輸出效果

§ ts:計(jì)算機(jī)內(nèi)部時(shí)間類型變量,一般使用struct_time對(duì)象

該方法返回的對(duì)象其實(shí)是字符串,比如將上面的struct_time對(duì)象gmtime進(jìn)行時(shí)間格式轉(zhuǎn)化:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

上面的'%Y-%m-%d %H:%M:%S'是用來轉(zhuǎn)化strcut_time對(duì)象的格式化字符串,除此以外還有:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

這個(gè)表很重要,我們后面在datetime庫中的對(duì)象以及pandas的datetime型Series對(duì)象在日期格式化操作的時(shí)候,都能用得上。

而如果我們想要將字符型的時(shí)間轉(zhuǎn)化為struct_time對(duì)象,可以用time.strptime()方法,格式剛好與time.strftime()方法對(duì)應(yīng)。

比如,如果有字符串時(shí)間'2020-02-01 16:49:11',要將其轉(zhuǎn)化為struct_time對(duì)象:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

3. time庫中的休眠時(shí)間

time庫中最常用的方法還有time.sleep(),比如,如果我們想要程序等待3.3秒之后再輸出,可以寫time.sleep(3.3)

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

time.sleep()方法在爬蟲等各種程序中應(yīng)用較廣,再次不在累述。

(二) datetime庫

datetime庫可以說是time庫的高級(jí)封裝,在各種日期數(shù)據(jù)處理方面,相對(duì)于time庫,datetime庫作了進(jìn)一步的升級(jí)。

datetime庫主要記載時(shí)間的類有datetime.date類、datetime.time、datetime.datetime類。

1. datetime.date類

在datetime庫中,可以通過datetime.date()方法生成年、月、日時(shí)間,返回的對(duì)象是datetime.date類。

這里要注意,datetime.date類只記錄年、月、日這三個(gè)時(shí)間元素,不記錄時(shí)分秒等其他時(shí)間元素。

通過datetime.date()方法中的參數(shù)year、month、day指定年、月、日三個(gè)時(shí)間元素。

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

我們可以通過datetime.date.today()方法來獲得當(dāng)前的日期,該方法返回的對(duì)象也是datetime.date類。

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

(1) datetime.date類的屬性

另外,datetime.date類常用的屬性有year、month、day。參數(shù)都為整數(shù):

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

(2) datetime.date類時(shí)間格式化方法

datetime.date類的時(shí)間格式化方法也叫strftime(),比如當(dāng)前我們有datetime.date對(duì)象date_samp如下:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

通過datetime.date對(duì)象直接調(diào)用.strftimie()方法進(jìn)行指定時(shí)間格式轉(zhuǎn)換如下:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

而格式化字符串可以參考前面time庫的表格。這里大家會(huì)發(fā)現(xiàn),雖然格式化方法的strftime()的名字和前面一樣,且格式化字符串也和前面time庫的是一樣的,但是其調(diào)用方式卻又不相同,這也是為什么很多同學(xué)兩個(gè)時(shí)間庫的格式化方法總是不小心寫錯(cuò)的原因。

當(dāng)然,像上面這種常見的字符串日期類型,每次都要使用這么復(fù)雜的格式化字符串來轉(zhuǎn)換,未免太過繁瑣,其實(shí)datetime.date對(duì)象可以直接使用方法.isoformat()來轉(zhuǎn)化:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

和datetime.date類的屬性相似,datetime.time類也有類似的屬性:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

而時(shí)間格式化的方法和datetime.date類一樣,也是通過datetime.time對(duì)象的.strftime()方法來調(diào)用:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

(3) unix時(shí)間戳轉(zhuǎn)換

time庫中的unix時(shí)間戳,如何轉(zhuǎn)化為datetime.date類?用實(shí)例的方法.fromtimestamp()即可,比如我們有當(dāng)前的時(shí)間戳current_timestamp:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

上面的時(shí)間戳我們?nèi)绻氆@得其中的日期的話,可以使用
datetime.date.fromtimestamp()方法直接轉(zhuǎn)換:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

當(dāng)然,返回來的也是datetime.date類的對(duì)象。

4. datetime.time類

datetime庫中的datetime.time類用來記載時(shí)間,包括時(shí)、分、秒、毫秒。

datetime.time()方法可以創(chuàng)建datetime.time類的對(duì)象,參數(shù)包括hour、minute、second、microsecond。

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

datetime.time類的屬性:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

而時(shí)間格式化的方法和datetime.date類一樣,也是通過datetime.time對(duì)象的.strftime()方法來調(diào)用:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

上面可以看到,datetime.time對(duì)象的.strftime()方法返回來的對(duì)象也是字符串。

同樣地,datetime.time對(duì)象也有.isoformat()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

但是需要留意的是, datetime.time對(duì)象并沒有.fromtimestamp()方法來進(jìn)行時(shí)間戳轉(zhuǎn)換。

5. datetime.datetime類

datetime.datetime類的對(duì)象主要是用作記錄年月日、時(shí)分秒等時(shí)間單位,我們可以把它看做是datetime.date類和datetime.time類的“結(jié)合體”。

創(chuàng)建datetime.datetime類對(duì)象的方法和datetime.time類也是基本一致的,參數(shù)包含year、month、day、hour、minute、second、microsecond。 但是至少要包含year、month、day三個(gè)參數(shù)。

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

而datetime.datetime類的時(shí)間格式化的方法,也是.strftime(),格式化字符串和前面也是一致的:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

datetime.datetime對(duì)象的.isoformat()方法返回結(jié)果會(huì)有點(diǎn)“與眾不同”,日期和時(shí)間之間多了一個(gè)字符‘T’:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

而如果想快速獲得當(dāng)前的日期時(shí)間,可以使用datetime.datetime.now():

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

6. datetime.timedelta類

datetime.timedelta類用來記錄時(shí)間間隔類,給一個(gè)時(shí)間點(diǎn)加減此類,即可得到一個(gè)新的時(shí)間。

datetime.timedelta()方法可以用來創(chuàng)建datetime.timedelta對(duì)象,參數(shù)包含days、hours、minutes、seconds、microseconds。

比如我們創(chuàng)建一個(gè)45天零6小時(shí)的時(shí)間間隔:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

時(shí)間間隔對(duì)象生成后,就可以使用datetime對(duì)象對(duì)其進(jìn)行加減:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

(三) time庫與datetime庫時(shí)間對(duì)象互轉(zhuǎn)

看到這里,相信很多同學(xué)內(nèi)心的土撥鼠都在慘叫:太多東西要記了,我太難啦~

確實(shí),使用Python寫爬蟲等程序時(shí),時(shí)常需要用到time庫與datetime庫中的各種時(shí)間對(duì)象,最為頭疼的地方往往是各種時(shí)間格式轉(zhuǎn)換。其實(shí),在了解time庫和datetime庫的各種類和屬性方法后,記住下面這張圖可以事半功倍:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

我們通過一下過程捋一下思路:

字符串型時(shí)間轉(zhuǎn)datetime.datetime對(duì)象,用
datetime.datetime.strptime()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

datetime.datetime轉(zhuǎn)字符串,用datetime.datetime實(shí)例的.strftime()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

字符串型時(shí)間轉(zhuǎn)struct_time,用time.strptime()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

struct_time轉(zhuǎn)字符串型時(shí)間,用time.strftime()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

struct_time轉(zhuǎn)unix時(shí)間戳,用time.mktime()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

unix時(shí)間戳轉(zhuǎn)struct_time,用time.gmtime()或time.localtime()方法:

傻傻分不清楚系列 | Python中各種時(shí)間處理方法(上)

今天我們把python中time庫與datetime庫幾個(gè)主要的時(shí)間對(duì)象的方法都理清楚了,同時(shí)將其互轉(zhuǎn)的規(guī)律也作了總結(jié)和歸納。篇幅有限,我們?cè)谙乱幌盗械奈恼吕?,繼續(xù)探討pandas庫中的時(shí)間對(duì)象和time庫、datetime庫的對(duì)象相互之間的關(guān)聯(lián)性。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }