Python日期时间模块arrow的具体使用

远山来客
远山来客
发布时间:2026-10-15 | 4人浏览过
原创

本文详细介绍Python中轻量级日期时间处理库arrow的安装与核心用法。涵盖从多种格式字符串、时间戳创建Arrow对象,获取当前及指定时区时间,以及将时间转换为指定格式字符串或时间戳的方法。同时解析如何提取时间属性、修改时区与时间值,并演示shift、replace、humanize等实用功能,帮助开发者高效处理复杂时间操作。

Python内置了time和datetime等模块,提供了完整的日期、时间及跨时区转换功能。然而,这些内置方法往往过于繁杂,记忆成本高,且频繁涉及格式转换(如时间戳与字符串互转),每次使用都需查阅文档。是否存在一种更简洁、人性化的日期时间处理方案?本文将介绍arrow库,它旨在简化这一过程。

arrow是一个专为处理时间和日期设计的轻量级Python库。它提供了直观且人性化的接口,用于创建、操作、格式化及转换日期、时间和时间戳,并能轻松生成带有时区感知能力的日期时间实例。安装方式非常简单,只需执行pip install arrow命令即可。

arrow模块的使用

获取arrow对象

Arrow库具备强大的灵活性,能够将多种格式的时间数据转换为Arrow对象。具体转换示例如下:


import arrow
print(repr(arrow.Arrow(2021, 8, 23, 8)))
print(repr(arrow.get(2021, 8, 23, 8, 40)))
print(repr(arrow.get('2021-08-23 09:00')))
print(repr(arrow.get('2021.08.23')))
print(repr(arrow.get('23/2012/08', 'DD/YYYY/MM')))

执行结果如下:

上述几种方式均能实现字符数据到Arrow对象的转换,且过程十分灵活。此外,该库还支持将时间戳直接转换为Arrow对象。


print(repr(arrow.get(1629683393.6558669)))

获取当前时间


utc_time = arrow.utcnow()
local_time = arrow.now()
print(utc_time)
print(local_time)

通过调用utcnow()函数和now()函数,可以分别获取UTC时间和本地时间。若需获取特定区域的时间,可在调用now()时指定时区参数,例如使用arrow.now('US/Pacific')来获取美国太平洋时间。

时间形式转换

在实际开发中,经常需要进行时间格式的转换,例如将时间对象转换为指定格式的字符串,或转换为时间戳。

转换成时间字符串


now = arrow.now()

print(now)
print(now.format())
print(now.format("YYYY-MM-DD hh:mm:ss"))
print(now.format("YYYY-MM-DD"))

执行结果如下:

对比datetime模块中较为繁琐的'%Y-%M-%D %h:%m:%s'格式化方式,arrow的格式化输出更加人性化且易于记忆。

转换成时间戳

可以使用t.timestamp属性将arrow对象转换为时间戳。


now.timestamp

获取数据

将数据转换为Arrow对象后,可以便捷地提取所需的各种时间信息。通过year、month、day、hour、minute、second、week等属性,即可获取对应数据,示例如下:


now = arrow.now()

print(now.year)
print(now.month)
print(now.day)
print(now.hour)
print(now.minute)
print(now.second)
print(now.week)

修改时间

在处理时间数据时,常需对时间进行修改,例如调整时区或改变具体时间。可通过以下方式实现:


now = arrow.now()

print(now.format("YYYY-MM-DD hh:mm:ss"))  # 2021-08-23 10:11:04
now_utc = now.to("utc")
print(now_utc.format("YYYY-MM-DD hh:mm:ss"))  # 2021-08-23 02:11:04
now1 = now.replace(day=31, hour=12)
print(now1.format("YYYY-MM-DD hh:mm:ss"))  # 2021-08-31 12:11:04
now2 = now.shift(months=-2)
print(now2.format("YYYY-MM-DD hh:mm:ss"))  # 2021-06-23 10:11:04

可以使用to()方法切换时区,使用replace()方法修改具体时间点,使用shift()进行时间的前后推移。

将字符串转换为arrow对象 arrow.get(string[,format_string])


In [52]: arrow.get('2018-03-22 23:35:34')
Out[52]: <Arrow [2018-03-22T23:35:34+00:00]>

可以从字符串中通过格式参数搜索时间


In [13]: arrow.get('june waw born in May 1999', 'MMMM YYYY')
Out[13]: <Arrow [1999-05-01T00:00:00+00:00]>

arrow对象属性 datetime,timestamp,naive,tzinfo


In [54]: t.datetime
Out[54]: datetime.datetime(2019, 3, 22, 21, 39, 0, 223147, tzinfo=tzlocal())
 
In [55]: t.timestamp
Out[55]: 1553261940
 
In [58]: t.tzinfo
Out[58]: tzlocal()
 
In [59]: t.naive
Out[59]: datetime.datetime(2019, 3, 22, 21, 39, 0, 223147)

获取datetime对象的值


In [60]: t.year
Out[60]: 2019
 
In [62]: t.month
Out[62]: 3
 
In [63]: t.day
Out[63]: 22
 
In [64]: t.hour
Out[64]: 21

时间推移 a.shift(**kwargs)

shift方法获取某个时间之前或之后的时间,关键字参数为years,months,weeks,days,hours,seconds,microseconds


In [65]: t.shift(weeks=-1)
Out[65]: <Arrow [2019-03-15T21:39:00.223147+08:00]>
 
In [66]: t.shift(days=20)
Out[66]: <Arrow [2019-04-11T21:39:00.223147+08:00]>
 
In [67]: t.shift(hours=1)
Out[67]: <Arrow [2019-03-22T22:39:00.223147+08:00]>

时间替换 a.replace(**kwargs)

返回一个被替换后的arrow对象,原对象不变


In [68]: t.replace(year=2018)
Out[68]: <Arrow [2018-03-22T21:39:00.223147+08:00]>
 
In [69]: t
Out[69]: <Arrow [2019-03-22T21:39:00.223147+08:00]>

格式化输出 a.format([format_string])


In [70]: t.format()
Out[70]: '2019-03-22 21:39:00+08:00'
 
In [71]: t.format('YYYY-MM-DD HH-MM-SS')
Out[71]: '2019-03-22 21-03-22'

最牛的是这个人性化输出 a.humanize()


In [72]: t.humanize()
Out[72]: '2 hours ago

同Python内置日期datetime库一样,arrow对象也支持时间的大小对比,还有计算时间差操作,除此之外,还有很多意想不到的操作,感兴趣的话,可以查看官方文档:Arrow: Better dates & times for Python — Arrow 🏹 1.1.1 documentation

到此这篇关于Python日期时间模块arrow的具体使用的文章就介绍到这了,更多相关Python日期时间模块arrow 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表