时间旅行java_设定基准点去时间旅行|Delorean使用笔记

Delorean简介

Delorean是一个在dateutil基础上进一步拓展的Python时间库,以《回到未来》中的时间旅行车命名。Delorean目前已经发展到1.0版本[1] ,其接口更偏向面向对象的写法,时间戳使用epoch定义,时间对象可以和datetime.timedelta进行计算,Delorean默认都调为UTC时间以避免一些时区的问题,实践代码如下。

fromdeloreanimportDeloreandt=Delorean()#获取当前时间,相当于nowd2=dt.replace(hour=8)#改时间要素的值d=delorean.parse('2020/01/01')d2.humanize()#转时间为自然语言#'3 hours ago'd.datetime.year#获取年份#2020d.datetime.strftime('%Y-%m-%d')#转为字符串

Delorean的接口也挺简约,处理字符串输入使用parse、时间偏移使用replace,概览的思维导图如下。

7014a29ad96a42ef8b9365920bf4ece7.png

Delorean接口概览

时间解析与转换

Delorean有多个接口用于解析和转换其他格式数据为时间对象,解析字符串用parse、处理时间戳用epoch、输入的是datetime对象直接用Delorean()。

•delorean.parse(text):从字符串解析时间,例如parse('2020/01/01');•delorean.epoch(ts):时间戳转时间对象,例如epoch(1357971038.13);•Delorean(datetime=dt):从datetime对象转为Delorean时间对象;

dt=delorean.parse("2020/09/01 00:00:00 +0800")#Delorean(datetime=datetime.datetime(2020,9,1,0,0), timezone=pytz.FixedOffset(480))dt.datetime #转为datetime类型d.datetime.month #获取月份dt.next_tuesday()#dt的下周二对应的时间

Delorean时间对象要转为datetime对象使用就写dt.datetime,要获取年月日等时间属性,先转datetime再使用datetime的接口。转换及获取属性的一些方法如下:

•dt.datetime:转为datetime类型;•dt.date:转为datetime的日期类型,输出例如datetime.date(2020,12,7);•dt.naive:转为当前时区的时间,输出也是datetime类型;•dt.epoch:转为时间戳;•dt.datetime.strftime(fmt):转为格式化字符串;•dt.datetime.year:获取时间对象的年份,不支持直接 dt.year;•dt.humanize():把时间输出为自然语言;

时间偏移

在Delorean里年月日等时间要素的调整接口是replace,而改时区是使用的shift,我觉得整合到一个方法里会更好,其他库如Arrow是这么做的,replace可以改时区。

dt.replace(hour=8)#改时间dt.shift('US/Eastern')#改时区dt-dt.replace(hour=1)#时间间隔dt-timedelta(hours=2)#两小时之前

Delorean时间对象相减得到的是datetime的timedelta类型,故dt也可以直接和datetime的timedelta想加减,说明Delorean时间对象和datetime的兼容性也很高。

时间序列

Delorean中生成一组时间值使用的是stops,源码里用到了dateutil模块的rrule方法,设定的参数包括:

•freq:两个时间点之间的时间间隔,声明序列重复的周期;写法是delorean.DAILY、delorean.MONTHLY等•count:生成多少个时间对象;•start:序列第一个时间点的时间,如果不设置则使用当前时间;•stop:序列的结束的时间;

Delorean还有range_daily()、range_hourly()等接口,功能类似。

list(delorean.stops(freq=delorean.DAILY,count=10))#Out[]:#[Delorean(datetime=datetime.datetime(2020, 12, 07, 8, 2, 51), timezone='UTC'),# Delorean(datetime=datetime.datetime(2020, 12, 08, 8, 2, 51), timezone='UTC'), ...

总结

Delorean是个挺全面的时间库,和datetime的协作很方便,但接口有些杂了,不够简洁和成体系,获取属性还需要转为datetime,显得常用的功能却没有优先封装,与Arrow、Pendulum还有些差距,是一个值得了解的Python时间库。Delorean功能的总结思维导图如下。

d24694f3bcf0d41903c22dab4f8f9990.png

Delorean功能与方法思维导图

References

[1] Delorean官方文档: https://delorean.readthedocs.io/en/latest/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值