新聞中心
Python 默認(rèn)支持時間序列的庫有很多,通常 time 和 datetime 是用的最多的,雖然他們在一般情形下絕對夠用,但是總有一些比較奇葩的時間格式的需求,而我們也就不能僅限于這兩個 Python 自帶的庫。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、網(wǎng)站制作、涼城網(wǎng)絡(luò)推廣、重慶小程序開發(fā)、涼城網(wǎng)絡(luò)營銷、涼城企業(yè)策劃、涼城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供涼城建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
[[358025]]
DateParser 和 Dateutil
這是兩款比較友好的用于處理各種時間格式的第三方庫,它能將各種奇怪寫法的時間轉(zhuǎn)換成標(biāo)準(zhǔn)的時間格式,比如:
- # -*- coding: utf-8 -*-
- # @Time : 2020-12-05 16:46
- import time
- import dateparser
- from dateutil import parser
- print(dateparser.parse("2020/11/7 5:01:08"))
- print(parser.parse("2020"))
碰到個需求
最近在做一些自動化文件導(dǎo)出的時候,由于有一些平臺有導(dǎo)出的數(shù)量限制,比如某某平臺如果所選時間是半年,然后累計數(shù)據(jù)量達(dá)到 50w,就會導(dǎo)出失敗。
對于這種情況就要做一下時間切分,比如可以分為按月,甚至按周來進(jìn)行導(dǎo)出,也就是 rangeTime。
當(dāng)在 Google 上搜索 Python time 或者 Datetime 切分時間的時候發(fā)現(xiàn)并沒有什么結(jié)果,然后就會想起有個更牛的處理時間的庫,也就是 Arrow 了。
很多的博客對 Arrow 的講解也都是一帶而過,貼出官方的例子,并沒有應(yīng)用于實際的項目,所以更多 Arrow 的用法也就沒有提到。
[[358026]]
Arrow
和 DateParser 一樣,Arrow 底層也是用 datetime 封裝的,在特定的地方可以和 datetime 進(jìn)行交互。
一些用法展示:
- # -*- coding: utf-8 -*-
- # @Time : 2020-12-05 16:46
- i = arrow.now()
- # i.replace(day=1) 替換時間為 1 號
- # i.shift(months=-1) 偏移量,往前推一個月
- # i.format('YYYY-MM-DD') 轉(zhuǎn)換為你想要的時間格式
- print(i.shift(days=-30).format('YYYY-MM-DD'))
- print(i.shift(months=-3).format('YYYY-MM-DD'))
- # 配合使用,鏈?zhǔn)椒▌t
- print(i.replace(day=1).shift(months=-1).format('YYYY-MM-DD'))
- print(i.replace(day=1).shift(months=-1).format('YYYY-MM-DD HH:mm:ss'))
回到解決剛才的那個需求, Arrow 的時間區(qū)間屬性可以在一段時間中根據(jù)不同時間粒度來進(jìn)行切分,來達(dá)到我們的需求。
- # -*- coding: utf-8 -*-
- # @Time : 2020-12-05 16:46
- import arrow
- # 開始于當(dāng)前時間,往前推 120 天
- end = datetime.datetime.now()
- start = end + datetime.timedelta(days=-120)
- # 獲取 120 內(nèi)的時間范圍,以月劃分
- def timeYmdRange(start=start,end=end):
- tRange = []
- for r in arrow.Arrow.span_range('months', start, end):
- qTime = [i.format('YYYY-MM-DD') for i in r]
- tRange.append(qTime)
- return tRange
- # 獲取 120 內(nèi)的時間范圍,以周劃分
- def timeWeekRange(start=start,end=end):
- tRange = []
- for r in arrow.Arrow.span_range('weeks', start, end):
- qTime = [i.format('YYYY-MM-DD') for i in r]
- tRange.append(qTime)
- return tRange
- # 自定義時間格式,按月劃分,結(jié)果為 202011
- def timeMonthRange(start=start,end=end):
- tRange = []
- for r in arrow.Arrow.range('months', start, end):
- qTime = r.format('YYYYMM')
- tRange.append(qTime)
- return tRange
- for r in timeHmsRange(start, end):
- print(','.join(r))
- print(timeWeekRange())
這樣一來就可以滿足我們的需求,并且保證在特定時間區(qū)間內(nèi)不會重復(fù)天數(shù)(或者更小的時間粒度),不要使用很多很多的時間處理庫,用的越多也就更加錯綜復(fù)雜,有那么一兩款好用,易用的時間庫足矣,哈哈 !!
網(wǎng)頁名稱:一篇文章教會你Arrow 時間庫在項目中的實際應(yīng)用
轉(zhuǎn)載注明:http://m.fisionsoft.com.cn/article/dpoidep.html


咨詢
建站咨詢
