内容目录
原文链接:http://www.juzicode.com/python-module-arrow
Arrow 是一个专注于日期时间处理的 Python 第三方库,以更人性化的 API 设计著称。它融合了 datetime、pytz 和 dateutil 的核心功能,提供链式调用、智能解析和时区自动处理等特性,被开发者誉为「Python 最好用的时间库」。
应用场景
Arrow 特别适用于以下场景:
- 日志处理:解析多种格式的时间戳
- API 开发:自动处理时区转换
- 数据分析:生成时间序列数据集
- 国际化应用:多语言时间显示
安装方法
通过 pip 一键安装:
pip install arrow
基本用法
1. 创建时间对象
#juzicode.com/VX公众号:juzicode
import arrow
now = arrow.now()
print(now) # 输出: 2025-06-02T15:30:00+08:00
2. 智能解析时间
#juzicode.com/VX公众号:juzicode
dt = arrow.get('2025-06-02 15:30:00')
print(dt.format('YYYY-MM-DD HH:mm:ss')) # 输出: 2025-06-02 15:30:00
3. 时区转换
#juzicode.com/VX公众号:juzicode
utc_time = arrow.now().to('UTC')
ny_time = utc_time.to('America/New_York')
print(ny_time) # 输出: 纽约时区的当前时间
4. 人性化时间显示
#juzicode.com/VX公众号:juzicode
past_time = arrow.now().shift(hours=-3)
print(past_time.humanize()) # 输出: 3 hours ago
5. 时间范围生成
#juzicode.com/VX公众号:juzicode
start = arrow.get('2023-10-01')
end = start.shift(days=7)
for day in arrow.Arrow.range('day', start, end):
print(day.format('YYYY-MM-DD')) # 输出连续7天的日期
运行结果:
2023-10-01
2023-10-02
2023-10-03
2023-10-04
2023-10-05
2023-10-06
2023-10-07
2023-10-08
6. 时间戳转换
#juzicode.com/VX公众号:juzicode
timestamp = 1796295603
dt = arrow.get(timestamp)
print(dt) # 输出: 2026-12-03T11:00:03+00:00
高级功能
1. 跨时区会议时间计算
#juzicode.com/VX公众号:juzicode
meeting_time = arrow.now().replace(hour=10, minute=0)
shanghai_time = meeting_time.to('Asia/Shanghai')
london_time = meeting_time.to('Europe/London')
print(f"上海时间: {shanghai_time}\n伦敦时间: {london_time}")
运行结果:
上海时间: 2025-06-02T10:00:06.484005+08:00
伦敦时间: 2025-06-02T03:00:06.484005+01:00
2. 节假日判断
#juzicode.com/VX公众号:juzicode
from arrow import Arrow
def is_weekend(dt: Arrow) -> bool:
return dt.weekday() in (5, 6)
print(is_weekend(arrow.get('2023-10-07'))) # 输出: True
3. 时间间隔计算
#juzicode.com/VX公众号:juzicode
start = arrow.get('2023-10-01')
end = arrow.get('2023-10-15')
delta = end - start
print(delta.days) # 输出: 14
4. 自定义时间格式
#juzicode.com/VX公众号:juzicode
custom_format = 'YYYY年M月D日 HH时mm分ss秒'
print(arrow.now().format(custom_format)) # 输出: 2025年6月2日 17时30分00秒
5. 时间范围切片
#juzicode.com/VX公众号:juzicode
time_range = arrow.Arrow.span_range('hour',
arrow.now().shift(hours=-3),
arrow.now())
for start, end in time_range:
print(f"{start} 到 {end}") # 输出最近3小时的每小时区间
运行结果:
2025-06-02T20:00:00+08:00 到 2025-06-02T20:59:59.999999+08:00
2025-06-02T21:00:00+08:00 到 2025-06-02T21:59:59.999999+08:00
2025-06-02T22:00:00+08:00 到 2025-06-02T22:59:59.999999+08:00
2025-06-02T23:00:00+08:00 到 2025-06-02T23:59:59.999999+08:00
总结
Arrow 的核心优势包括:
- 更人性化的 API 设计
- 自动时区处理机制
- 内置常见时间操作需求
- 优秀的文档和社区支持
与标准库 datetime 相比,Arrow 的代码可读性提升显著。虽然依赖 pytz 和 dateutil 实现部分功能,但其封装层使得开发者无需直接处理底层复杂性。对于需要频繁处理时间的项目,Arrow 能显著提升开发效率。