Arrow: 让 Python 日期时间操作不再痛苦

arrow-py/arrow 在 GitHub 上拿到了 9,045 Star。

Python 标准库的日期时间模块一直让人头疼。datetime、time、calendar、dateutil、pytz,模块太多。date、time、datetime、tzinfo、timedelta,类型也太多。时区和时间戳转换写起来又长又绕。

Arrow 就是为这些痛点设计的。

1、 它解决了什么问题

写过 Python 日期处理的程序员都遇到过类似的窘境:解析一个 ISO 8601 时间字符串,得自己去查 strptime 的格式代码;处理时区,要额外装 pytz;计算三天后的日期,手动 timedelta,代码读完也不清楚到底做了什么。

Arrow 把分散的功能整合到一个对象上。创建、解析、转换、格式化、时区切换、人性化显示,全走同一个接口。

2、 核心功能

自动格式解析。get 方法能自动识别常见的时间字符串格式,不需要手工拼格式代码。支持 ISO 8601、RFC 2822 等标准格式,也覆盖了日常见到的大多数时间字符串写法。

内置时区支持。Arrow 默认使用 UTC,避免时区 naive 带来的隐性 bug。支持 pytz、dateutil 和 Python 3.9 的 ZoneInfo,切换时区一行完成。无论是转成纽约时间还是东京时间,不需要额外处理夏令时。

直观的时间偏移。shift 方法按小时、天、周、月做相对计算,代码读起来接近自然语言。shift(hours=-1) 就是减一小时,shift(weeks=3) 就是加三周,没有歧义。

人性化显示。humanize 把时间差转成"an hour ago"这类表达,支持几十种语言和地区。国际化的项目可以直接用。

时间区间和范围。可以按微秒到年的时间粒度,生成时间区间、时间范围、天花板和地板值。做数据聚合和报表时很实用。

PEP 484 类型提示全支持,编辑器里能拿到完整的类型补全。

正文顶部截图

3、 怎么用

安装:

pip install -U arrow

基本用法:

import arrow

# 自动解析
arrow.get('2013-05-11T21:23:58.970460+07:00')

# UTC 当前时间
utc = arrow.utcnow()

# 时间偏移
utc.shift(hours=-1)

# 时区转换
local = utc.to('US/Pacific')

# 格式化
local.format('YYYY-MM-DD HH:mm:ss ZZ')

# 人性化显示
local.humanize()
local.humanize(locale='ko-kr')  # '한시간 전'

接口简洁,最常见的操作五六个方法覆盖完。

README区域截图

4、 适合的场景

  • 项目里频繁涉及时区转换和时间格式化的 Python 开发者
  • 需要时间区间计算和范围遍历的数据处理任务
  • 想减少样板代码、提升代码可读性的团队

Arrow 的核心思路是用一个库完成一件事,而不是在 datetime、time、calendar、pytz 之间来回切。

升代码可读性的团队

Arrow 的核心思路是用一个库完成一件事,而不是在 datetime、time、calendar、pytz 之间来回切。

更多推荐