您现在的位置是:亿华云 > 系统运维
一篇文章教会你Arrow 时间库在项目中的实际应用
亿华云2025-10-02 19:04:21【系统运维】8人已围观
简介Python 默认支持时间序列的库有很多,通常 time 和 datetime 是用的最多的,虽然他们在一般情形下绝对够用,但是总有一些比较奇葩的时间格式的需求,而我们也就不能仅限于这两个 Pytho
Python 默认支持时间序列的篇文库有很多,通常 time 和 datetime 是章教用的最多的,虽然他们在一般情形下绝对够用,时间但是库项总有一些比较奇葩的时间格式的需求,而我们也就不能仅限于这两个 Python 自带的目中库。

DateParser 和 Dateutil
这是篇文两款比较友好的用于处理各种时间格式的第三方库,它能将各种奇怪写法的章教时间转换成标准的时间格式,比如:
# -*- 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"))碰到个需求
最近在做一些自动化文件导出的时间时候,由于有一些平台有导出的库项数量限制,比如某某平台如果所选时间是目中半年,然后累计数据量达到 50w,篇文就会导出失败。章教
对于这种情况就要做一下时间切分,香港云服务器时间比如可以分为按月,库项甚至按周来进行导出,目中也就是 rangeTime。
当在 Google 上搜索 Python time 或者 Datetime 切分时间的时候发现并没有什么结果,然后就会想起有个更牛的处理时间的库,也就是 Arrow 了。
很多的博客对 Arrow 的讲解也都是一带而过,贴出官方的例子,并没有应用于实际的项目,所以更多 Arrow 的用法也就没有提到。

Arrow
和 DateParser 一样,Arrow 底层也是用 datetime 封装的,在特定的地方可以和 datetime 进行交互。
一些用法展示:
# -*- coding: utf-8 -*- # @Time : 2020-12-05 16:46 i = arrow.now() # i.replace(day=1) 替换时间为 1 号 # i.shift(months=-1) 偏移量,云南idc服务商往前推一个月 # i.format(YYYY-MM-DD) 转换为你想要的时间格式 print(i.shift(days=-30).format(YYYY-MM-DD)) print(i.shift(months=-3).format(YYYY-MM-DD)) # 配合使用,链式法则 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 的时间区间属性可以在一段时间中根据不同时间粒度来进行切分,来达到我们的需求。
# -*- coding: utf-8 -*- # @Time : 2020-12-05 16:46 import arrow # 开始于当前时间,往前推 120 天 end = datetime.datetime.now() start = end + datetime.timedelta(days=-120) # 获取 120 内的时间范围,以月划分 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 内的时间范围,以周划分 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 # 自定义时间格式,按月划分,结果为 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())这样一来就可以满足我们的需求,并且保证在特定时间区间内不会重复天数(或者更小的时间粒度),不要使用很多很多的时间处理库,用的越多也就更加错综复杂,有那么一两款好用,易用的时间库足矣,哈哈 !!
很赞哦!(4)