Python轮子:arrow~Python最好用的时间库

原文链接: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 能显著提升开发效率。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注