Python时间处理利器:Arrow库详解与实战
本文深入解析Python中强大的时间处理库Arrow。通过对比原生datetime模块,展示Arrow如何简化时间操作。涵盖安装方法、当前时间获取、时间偏移(shift)、本地化显示(humanize)及多种格式转换技巧,帮助开发者高效处理复杂时间需求。
时间处理库——Arrow
使用背景
在实际开发场景中,日期与时间的处理无处不在,因此它已成为各类编程语言不可或缺的标准模块,Python自然也不例外。然而,你是否清楚Python中涉及时间相关的模块究竟有多少?例如datetime、time、calendar、 dateutil、 pytz 等。此外,你还了解Python中支持的时间数据类型有哪些吗?比如date、time、datetime、tzinfo、timedelta 等。
博主曾在一个具体需求中遇到挑战:需要统计过去几个月内的数据。前端传递过来的是当前时间戳,我需要基于该时间戳向前推算三个月、四个月甚至半年的时间。如果仅依靠基础的时间加减运算,过程将变得异常繁琐。因此,博主决定采用Python的时间处理库——Arrow来解决这一问题。
在正式介绍Arrow库之前,我们先回顾一下Python中各种时间格式之间的转换方式。

无论使用何种工具,熟练掌握相关模块和API操作都是必不可少的。即使无法记住所有细节,至少也应通过手动编写代码来加深印象。这样,下次遇到问题时,你才能快速查阅文档,定位到具体类或方法的功能及用法。
但今天,我要重点推荐一个时间日期库:Arrow。它的灵感来源于requests库,旨在将所有复杂的底层逻辑隐藏起来,为用户提供一个对开发者友好的接口(for humans)。这充分诠释了“Keep It Simple and Stupid”(KISS)原则的含义。
安装Arrow
pip install arrow
Arrow库的使用方法
- 获取当前时间

- 获取不同时间格式

游标偏移(shift)
这是Arrow库中我认为最实用的功能之一。它允许你随意将时间向前或向后推移,基本能够满足所有关于时间推算的操作需求。建议尽快尝试使用。
- 向后推算时间

- 向前推算时间

- 人性化显示(humanize)
humanize方法用于将当前时刻转换为“多久以前”的可读字符串形式。默认输出为英文格式,通过指定locale参数,可以显示相应语言的格式。

- 格式化(format)

获取Arrow对象
- get方法是获取Arrow对象最便捷的方式。
# 不带参数,等价与 utcnow()
>>> arrow.get()
<Arrow [2018-08-24T07:11:50.528742+00:00]>
# 接受时间戳参数
>>> arrow.get(1535113845)
# 接受一个datetime对象
>>> arrow.get(datetime(2018,8,24))
<Arrow [2018-08-24T00:00:00+00:00]>
# 接收一个date对象
>>> from datetime import date
>>> arrow.get(date(2018,7,24))
<Arrow [2018-07-24T00:00:00+00:00]>
# 接收日期格式的字符串
>>> arrow.get("2018-08-11 12:30:56")
<Arrow [2018-08-11T12:30:56+00:00]>
# 接收日期字符串,并指定格式
>>> arrow.get("18-08-11 12:30:56", "YY-MM-DD HH:mm:ss")
<Arrow [2018-08-11T12:30:56+00:00]>
Arrow类型转换与时区修改
# 字符串转时间
print(arrow.get('2017-10-28T00:00:00+0800'))
# print(arrow.get('2017-10-28', 'YYYY-MM-DD')) # 字符串转时间(不推荐这样用,没有设时区)
print(arrow.get('2017-10-28', 'YYYY-MM-DD', tzinfo='local')) # (推荐)
print(arrow.get('2017-10-28', 'YYYY-MM-DD', tzinfo='Asia/Shanghai')) # 这样也可以
print(arrow.get('2017-10-28 05:30:30', 'YYYY-MM-DD HH:mm:ss', tzinfo='local')) # (推荐)
print('-------------')
# 时间戳
print(local.timestamp) # 时间戳
print(arrow.get('1509120000', tzinfo='local')) # 时间戳字符串,转换为本时区的时间
# 时间转为字符串,输出(格式化)
print(local.format("YYYY-MM-DD"))
print(local.format("YYYY-MM-DD HH:mm:ss"))
print(local.replace(minutes=-1).humanize(locale='zh')) # 本地化个性时间短语: 刚才,1分钟前,1天前,等 (zh_tw 更多语言的支持,去查看arrow/locales.py)
关于Python中Arrow库的使用介绍暂告一段落。在后续文章中,我将介绍用于处理数据的Pandas库,帮助你轻松应对Python中复杂而海量的数据处理任务。
总结
本文到此结束,希望能为你提供帮助。同时也欢迎大家关注本站,获取更多技术内容!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









