Python 日期时间处理利器:Arrow 库全面指南

键盘旁的猫
键盘旁的猫
发布时间:2026-10-14 | 4人浏览过
原创

Python内置日期处理模块较为繁琐,第三方库Arrow提供了更人性化的解决方案。本文详细介绍如何使用Arrow获取当前时间、转换时间戳与字符串、创建对象,以及进行时间推移、替换、格式化输出和区间查询,帮助开发者用更少的代码高效处理日期时间任务。

Arrow库简介与安装

Python标准库虽然提供了丰富的日期时间处理包、类和方法,但在实际应用中,其易用性往往显得繁琐且不够直观。

为了解决这一问题,第三方库Arrow提供了一种更加合理且用户友好的方式,用于创建、操作、格式转换日期、时间及时间戳。它旨在帮助开发者通过减少导入依赖和代码量,更高效地处理日期时间相关任务。


$ pip install arrow

获取当前时间

要获取当前时间,可以使用arrow.utcnow()获取UTC时间,或使用arrow.now()获取本地时间。


>>> arrow.utcnow() 
<Arrow [2018-02-24T13:15:29.981135+00:00]> 
>>> arrow.now() 
<Arrow [2018-02-24T21:15:50.841056+08:00]>

时间戳转换

若需将时间戳转换为Arrow对象,可使用arrow.get(timestamp)。


>>> arrow.get(1519534533) 
<Arrow [2018-02-25T04:55:33+00:00]>

>>> arrow.get('1519534533') 
<Arrow [2018-02-25T04:55:33+00:00]> 

>>> arrow.get(1519534533.153443)
<Arrow [2018-02-25T04:55:33.153443+00:00]> 

>>> arrow.get('1519534533.153443')
<Arrow [2018-02-25T04:55:33.153443+00:00]>

此处支持的时间戳类型包括整数(int)、浮点数(float),或者能够转换为浮点数的字符串。

字符串转换与解析

将字符串转换为Arrow对象时,可使用arrow.get(string[,format_string]),其中format_string为可选的格式字符串参数。


>>> arrow.get('2018-02-24 12:30:45', 'YYYY-MM-DD HH:mm:ss')
<Arrow [2018-02-24T12:30:45+00:00]>

如果遵循ISO-8601标准的字符串,则无需提供格式字符串参数即可直接转换。


>>> arrow.get('2018-02-24T13:00:00.000-07:00')
<Arrow [2018-02-24T13:00:00-07:00]>

此外,还可以利用格式参数从字符串中搜索并提取特定的时间信息。


>>> arrow.get('June was born in May 1980', 'MMMM YYYY')
<Arrow [1980-05-01T00:00:00+00:00]>

直接创建与属性访问

开发者也可以直接创建Arrow对象,例如通过指定年月日等参数。


>>> arrow.get(2018, 2, 24)
<Arrow [2018-02-24T00:00:00+00:00]>

>>> arrow.Arrow(2018, 2, 24)
<Arrow [2018-02-24T00:00:00+00:00]>

Arrow对象包含多个属性,如datetime、timestamp、naive和tzinfo,可用于访问底层数据。


>>> a = arrow.utcnow()
>>> a.datetime
datetime.datetime(2018, 2, 24, 21, 15, 50, 841056, tzinfo=tzlocal())

>>> a.timestamp
1519478150

>>> a.naive
datetime.datetime(2018, 2, 24, 21, 58, 4, 309575)

>>> a.tzinfo
tzlocal()

通过访问这些属性,可以直接获取对应的datetime对象值或时间戳数值。


>>> a.hour
21  
>>> a.day
2 

时间推移与替换

若需对时间进行推移操作,可使用a.shift(**kwargs)方法。

shift方法用于获取指定时间之前或之后的时间点,支持的关键字参数包括years、months、weeks、days、hours、seconds和microseconds。


>>> a.shift(weeks=+3)  #三周后
<Arrow [2018-03-17T21:58:04.309575+08:00]>  

>>> a.shift(days=-1)   #一天前  
<Arrow [2018-02-23T21:58:04.309575+08:00]

>>> a.shift(weekday=6)  #距离最近a的星期日,weekday从0到6
<Arrow [2018-02-25T21:58:04.309575+08:00]> 

若需替换时间的特定部分,可使用a.replace(**kwargs)方法。

该方法返回一个经过替换后的新Arrow对象,而原始对象保持不变。


>>> a
<Arrow [2018-02-24T21:58:04.309575+08:00]>
>>> a.replace(hour=9)
<Arrow [2018-02-24T09:58:04.309575+08:00]>

格式化与人性化输出

格式化输出时间时,可使用a.format([format_string]),指定所需的输出格式。


>>> a.format()
'2018-02-24 21:58:04+08:00'
>>> a.format('YYYY-MM-DD HH:mm:ss ZZ')
'2018-02-24 21:58:04 +08:00'

若需人性化输出时间,可使用a.humanize()方法,将时间转换为如“几小时前”等自然语言描述。


>>> present = arrow.utcnow()
>>> past = present.shift(hours=-1)
>>> past.humanize()    #相对于当前时间
'an hour age'
>>> future = present.shift(hours=2)
>>> future.humanize(present)  #相对于参数时间
'in 2 hours'
>>> past.humanize(present, locale='zh')  #locale参数可以指定地区语言
'1天前'

时间区间与范围处理

处理时间范围和区间时,可使用a.span(string)、a.floor()和a.ceil()方法。

此外,arrow.Arrow.span_range()和arrow.Arrow.range()可用于生成时间区间或特定间隔的时间列表。


>>> a
<Arrow [2018-02-24T21:58:04.309575+08:00]>
>>> a.span('hour')  #a所在的时间区间
(<Arrow [2018-02-24T21:00:00+08:00]>, <Arrow [2018-02-24T21:59:59.999999+08:00]>)  
>>> a.floor('hour')  #a所在区间的开始 
<Arrow [2018-02-24T21:00:00+08:00]>
>>> a.ceil('hour')  #a所在区间的结尾
<Arrow [2018-02-24T21:59:59.999999+08:00] 


>>> start = datetime.datetime(2018, 2, 24, 12, 30)
>>> end = datetime.datetime(2018, 2, 24, 15, 20)
>>> for r in arrow.Arrow.span_range('hour',start,end):  #获取start,end之间的时间区间
...   print(r)
...
(<Arrow [2018-02-24T12:00:00+00:00]>, <Arrow [2018-02-24T12:59:59.999999+00:00]>)
(<Arrow [2018-02-24T13:00:00+00:00]>, <Arrow [2018-02-24T13:59:59.999999+00:00]>)
(<Arrow [2018-02-24T14:00:00+00:00]>, <Arrow [2018-02-24T14:59:59.999999+00:00]>)
(<Arrow [2018-02-24T15:00:00+00:00]>, <Arrow [2018-02-24T15:59:59.999999+00:00]>)
>>> for r in arrow.Arrow.range('hour',start,end):    #获取间隔单位时间的时间
...   print(r)
...
2018-02-24T12:30:00+00:00
2018-02-24T13:30:00+00:00
2018-02-24T14:30:00+00:00

格式化字符串中可使用特定的标记来定义输出格式,具体标记请参考官方文档。

 

如需了解更多细节,请参考Arrow的官方文档和GitHub仓库。

本文介绍了Python中Arrow库在日期时间处理方面的基本用法,更多相关内容可参考本站过往文章或继续浏览后续教程。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表