Bang!这个Python处理时间的库,我拆解了!

 Bang!这个Python处理时间的库,我拆解了!

Python里面处理时间库的有很多,其中大家经常用的有datetime。但是对于懒人来说还是很不爽,有么有更简单的,可以把我们的需求比如的白话文本转为字符串的时间库呢,今天小编在GitHub找到了这个好玩的库,一起来看一下。

Bang!这个Python处理时间的库,我拆解了!

这个库的目标就是通过简单的字符串就可以操作datatime,算是在datatime上面再次做了一层封装,有点意思啊,我们一起来一探究竟。

安装一下:

pytime的安装很简单,直接用pip3 install pytime即可。

如何使用:

1).简单的获取当前的月,周,日的时间,以及上周,上月的时间

Bang!这个Python处理时间的库,我拆解了!

看一下输出的结果:

today:2020-08-16

this week:(datetime.date(2020, 8, 10), datetime.date(2020, 8, 17))

last week:(datetime.date(2020, 8, 3), datetime.date(2020, 8, 11))

this_month:(datetime.date(2020, 8, 1), datetime.date(2020, 9, 1))

日期的范围其实就是一个tuple类型的datatime起始-结束的日期范围。

2).直接输出节日日期

比如常见的圣诞节,情人节啊,新年,母亲节,父亲节之类的节日

Bang!这个Python处理时间的库,我拆解了!

拆解源码

看起来是作者做了一层固定节日的封装,我们来看一下源码,一探究竟,看看源码里面都封装了那些节日:

Bang!这个Python处理时间的库,我拆解了!

源码里面可以清晰的看到作者是如何构造的这个节日,其实就是进行了一些简单的运算,但是代码写的还是非常工整的。

3).识别文本字符串-得到日期

这个动态的识别文本,然后计算时间,应该是这个库最吸引人的地方,毕竟上面的日期,节假日其中你自己也可以封装的。但是识别文本就有点意思了:

Bang!这个Python处理时间的库,我拆解了!

上面两个函数,分别计算某一个日期前多少多少天,和某一个日期的后多少多少天,能自动的识别这一段字符串比如

2years 3mon 23week 3d 2hr

或者是没有空格连在一起写也可以

2years3mon23week3d2hr

拆解源码:

非常给力,小编也非常好奇它是怎么做到的,于是我扒开了这段源码看了一些:

Bang!这个Python处理时间的库,我拆解了!

原来before这个函数的接口有两个参数,一个就是base,一个是diff,base把时间字符串转为datetime类型,然后diff会用一个dp(diff)进行封装,然后解析这个一长串的字符串,顺藤摸瓜,我们一起来看一下这dp(diff)干了啥事情:

dp = BaseParser.parse_diff

dp其实是一个BaseParse这个解析器的一个接口函数,也就是说所以的字符串的解析都在这个parse_diff里面:

Bang!这个Python处理时间的库,我拆解了!

相关推荐