博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
arrow:让Python的日期与时间变的更好
阅读量:6217 次
发布时间:2019-06-21

本文共 3926 字,大约阅读时间需要 13 分钟。

在处理数据的时候经常会碰见各种时间数据,但因为时间数据的格式不统一,所以导致数据处理的时候有一些麻烦。Python的标准库提供了相应模块,但可用性却不高,也不够人性化。本专栏之前已经有文章介绍过在R中如何处理时间数据(lubridate包),而Python中也有实现类似功能的包。这篇文章我们讲一下如何使用Python的第三方库Arrow来处理时间数据。

Arrow提供一种易用的智能的方式来创建、操作、格式化和转换时间数据。

基本使用

Arrow处理时间数据时需要先将数据转为Arrow对象,Arrow可以灵活的转化多种格式的时间数据,如以不同间隔符分隔的时间数据:

>>> arrow.get('2017-01-05')
>>> arrow.get('2017.01.05')
>>> arrow.get('2017/01/05')
>>> arrow.get('2017/01.05')

还有以不同顺序排列的时间数据

>>> arrow.get('05/2017.01', 'DD/YYYY.MM')
>>> arrow.get('05/01/2017', 'DD/MM/YYYY')
>>> arrow.get('01.05.2017', 'MM.DD.YYYY')

timestamps时间数据当然也可以:

>>> arrow.get('1586782011')
>>> arrow.get('1586782011.123456')
>>> arrow.now().timestamp 1586782011
 

字符串中的时间数据也可以获取:

>>> arrow.get('June was born in May 1980', 'MMMM YYYY')

获取数据

转换为Arrow对象后,我们可以很方便的获取我们想要的各种时间数据,通过year、month、day、hour、minute、second、week等属性,如:

>>> now = arrow.now()>>> now
>>> now.year2017>>> now.month2>>> now.day4>>> now.hour13>>> now.minute47>>> now.second58>>> now.week5

修改数据

我们免不了需要对时间数据进行操作修改,Arrow也提供了很方便的方法来操作,如切换时区to()方法

>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc
>>> utc.to('local')
>>> utc.to('US/Pacific')
>>> utc.to('+02:00')

当然还有修改时间的replace()方法:

>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc
>>> utc.replace(days=+1)
>>> utc.replace(days=+1, hours=-1)
>>> utc.replace(weeks=+1)

数据运算

Arrow对象可以通过简单的大于小于符合来判断时间先后,如:

>>> start = arrow.get('2017-02-03T15:47:58.114342+02:00')>>> end = arrow.get('2017-02-02T07:17:41.756144+02:00')>>> start
>>> end
>>> start > endTrue>>> start_to = start.to('+08:00')>>> start == start_toTrue

也可以通过'-'运算符来获得时间的差值,如:

>>> start - enddatetime.timedelta(1, 30616, 358198)

时间区间

Arrow也可以根据时间来获取一个时间区间,如:

>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc
>>> utc.span('hour')(
,
)>>> utc.span('year')(
,
)>>> utc.span('day')(
,
)

也可以根据某个限定条件获取最大时间与最小时间,如:

>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc
>>> utc.floor('year')
>>> utc.ceil('year')
>>> utc.floor('day')
>>> utc.ceil('day')

人性化

Arrow还提供了一些人性化比较时间的方式,humanize()方法,具体例子如下:

>>> earlier = arrow.utcnow().replace(hours=-2)>>> earlier.humanize()'2 hours ago'>>> later = later = earlier.replace(hours=4)>>> later.humanize(earlier)'in 4 hours'

转载地址:http://yasja.baihongyu.com/

你可能感兴趣的文章
快速搭建phpwind论坛系统
查看>>
Request.Params(string name)获得页面控件的值
查看>>
2014025692 《嵌入式系统程序设计》第三、四周学习总结
查看>>
unix 命令
查看>>
通信常识
查看>>
动态规划最后一击
查看>>
利用JQUERY和CSS3实现优雅的手风琴(翻译)
查看>>
CodeForces Round #514 (div2)
查看>>
而我却认定
查看>>
Re:从零开始的Spring Session(一)
查看>>
Elasticsearch-sql 用SQL查询Elasticsearch
查看>>
Unity-Animator深入系列---StateMachineBehaviour初始化时间测试
查看>>
你必须学会的几个常用网络命令
查看>>
MySQL -- 在磁盘爆满后复制的状态
查看>>
MySQL、You are using safe update mode
查看>>
windows本地环境如何用wamp配置多域名绑定访问
查看>>
js sort方法根据数组中对象的某一个属性值进行排序
查看>>
Handsontable对单元格的操作
查看>>
201671030116宋菲菲 《英文文本统计分析》结对项目报告
查看>>
类加载器(二)
查看>>