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

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

 [[338438]]

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功力大有裨益,有兴趣的小伙伴也可以试试这个库,代码动起来。

 

责任编辑:华轩 来源: 菜鸟学Python
相关推荐

2022-10-20 18:43:32

C语言golang安全

2014-08-22 13:27:59

物联网

2017-05-31 14:25:14

戴尔数字经济转型

2019-12-26 09:15:44

网络IOLinux

2021-11-26 07:02:37

数据库

2022-08-05 13:03:09

Python依赖管理代码

2020-08-31 16:36:36

Redis架构节点

2022-10-24 08:45:23

数据库应用场景区块链

2017-11-07 13:24:38

Pythontime模块datetime

2019-04-30 15:10:42

Python调试工具编程语言

2020-08-11 10:40:31

装饰者模式Java组件

2022-05-03 00:03:11

状态管理前端开发

2011-05-26 13:36:40

Oracle数据库时间处理

2024-04-15 16:17:29

Python代码

2022-02-21 07:45:29

面向对象代码依赖倒置

2022-11-12 17:36:51

Web前端开源

2022-01-03 20:13:08

Gointerface 面试

2016-04-28 09:36:44

人才教育/华三

2021-09-07 12:58:46

Pythonujsonorjson

2020-07-20 07:48:53

单例模式
点赞
收藏

51CTO技术栈公众号