Python里面处理时间库的有很多,其中大家经常用的有datetime。但是对于懒人来说还是很不爽,有么有更简单的,可以把我们的需求比如的白话文本转为字符串的时间库呢,今天小编在GitHub找到了这个好玩的库,一起来看一下。
这个库的目标就是通过简单的字符串就可以操作datatime,算是在datatime上面再次做了一层封装,有点意思啊,我们一起来一探究竟。
安装一下:
pytime的安装很简单,直接用pip3 install pytime即可。
如何使用:
1).简单的获取当前的月,周,日的时间,以及上周,上月的时间
看一下输出的结果:
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).直接输出节日日期
比如常见的圣诞节,情人节啊,新年,母亲节,父亲节之类的节日
拆解源码
看起来是作者做了一层固定节日的封装,我们来看一下源码,一探究竟,看看源码里面都封装了那些节日:
源码里面可以清晰的看到作者是如何构造的这个节日,其实就是进行了一些简单的运算,但是代码写的还是非常工整的。
3).识别文本字符串-得到日期
这个动态的识别文本,然后计算时间,应该是这个库最吸引人的地方,毕竟上面的日期,节假日其中你自己也可以封装的。但是识别文本就有点意思了:
上面两个函数,分别计算某一个日期前多少多少天,和某一个日期的后多少多少天,能自动的识别这一段字符串比如
2years 3mon 23week 3d 2hr
或者是没有空格连在一起写也可以
2years3mon23week3d2hr
拆解源码:
非常给力,小编也非常好奇它是怎么做到的,于是我扒开了这段源码看了一些:
原来before这个函数的接口有两个参数,一个就是base,一个是diff,base把时间字符串转为datetime类型,然后diff会用一个dp(diff)进行封装,然后解析这个一长串的字符串,顺藤摸瓜,我们一起来看一下这dp(diff)干了啥事情:
dp = BaseParser.parse_diff
dp其实是一个BaseParse这个解析器的一个接口函数,也就是说所以的字符串的解析都在这个parse_diff里面:
果然这个函数里面就是专门来处理我们输入的"2years 3mon 23week 3d 2hr",作者做了很多封装的处理,就是为了我们使用的时候更智能一些。
通过一层一层的拆解,你会发现整个作者在设计这个库的思路和一些技巧点,这样的过程经常练习,对你提高Python功力大有裨益,有兴趣的小伙伴也可以试试这个库,代码动起来。