Arrow 时间处理库使用指南
arrow 项目地址: https://gitcode.com/gh_mirrors/arr/arrow
概述
Arrow 是一个优秀的 Python 时间处理库,它提供了比标准库 datetime 更友好、更人性化的 API 接口。本文将详细介绍 Arrow 的核心功能和使用方法,帮助开发者高效处理时间相关的编程任务。
时间创建
获取当前时间
Arrow 提供了多种获取当前时间的方式:
# 获取 UTC 当前时间
arrow.utcnow()
# 获取本地当前时间
arrow.now()
# 获取指定时区的当前时间
arrow.now('US/Pacific')
从时间戳创建
Arrow 支持从整数或浮点数时间戳创建时间对象:
arrow.get(1367900664) # 整数时间戳
arrow.get(1367900664.152325) # 浮点数时间戳(带毫秒)
从 datetime 对象创建
可以方便地将标准库的 datetime 对象转换为 Arrow 对象:
from datetime import datetime
from dateutil import tz
# 从 naive datetime 创建
arrow.get(datetime.utcnow())
# 指定时区创建
arrow.get(datetime(2013, 5, 5), 'US/Pacific')
# 使用 tzinfo 对象
arrow.get(datetime(2013, 5, 5), tz.gettz('US/Pacific'))
从字符串解析
Arrow 支持灵活的字符串解析:
# 指定格式解析
arrow.get('2013-05-05 12:30:45', 'YYYY-MM-DD HH:mm:ss')
# 从文本中提取日期
arrow.get('June was born in May 1980', 'MMMM YYYY')
# 自动解析 ISO 8601 格式
arrow.get('2013-09-30T15:34:00.000-07:00')
时间属性访问
Arrow 对象提供了多种属性访问方式:
a = arrow.utcnow()
# 获取 datetime 对象
a.datetime
# 获取 naive datetime
a.naive
# 获取时区信息
a.tzinfo
# 访问具体属性
a.year
a.month
a.day
# 调用 datetime 方法
a.date()
a.time()
时间修改与偏移
替换属性
arw = arrow.utcnow()
arw.replace(hour=4, minute=40) # 修改小时和分钟
arw.replace(tzinfo='US/Pacific') # 修改时区
时间偏移
arw.shift(weeks=+3) # 三周后
arw.shift(hours=-1) # 一小时前
处理模糊时间
对于夏令时转换等模糊时间,可以指定 fold 参数:
paris_transition = arrow.Arrow(2019, 10, 27, 2, tzinfo="Europe/Paris", fold=0)
paris_transition.replace(fold=1) # 切换到夏令时后的时间
时间格式化
Arrow 提供了强大的格式化功能:
arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')
支持多种内置格式标准:
arrow.FORMAT_ATOM # '2020-05-27 10:30:35+00:00'
arrow.FORMAT_COOKIE # 'Wednesday, 27-May-2020 10:30:35 UTC'
arrow.FORMAT_RSS # 'Wed, 27 May 2020 10:30:35 +0000'
时区转换
Arrow 使时区转换变得非常简单:
utc = arrow.utcnow()
utc.to('US/Pacific') # 转换为太平洋时间
utc.to('local') # 转换为本地时间
utc.to('local').to('utc') # 转回UTC
人性化显示
Arrow 可以将时间差转换为易读的文本:
past = arrow.utcnow().shift(hours=-1)
past.humanize() # "an hour ago"
future = present.shift(hours=2)
future.humanize(present) # "in 2 hours"
# 指定粒度
future.humanize(present, granularity=["hour", "minute"]) # "in an hour and 6 minutes"
# 支持多语言
future.humanize(locale='ru') # "через 2 час(а,ов)"
时间范围与跨度
获取时间跨度
# 获取当前小时的时间跨度
arrow.utcnow().span('hour') # (开始时间, 结束时间)
# 获取当前小时的开始和结束
arrow.utcnow().floor('hour') # 小时开始
arrow.utcnow().ceil('hour') # 小时结束
生成时间范围
start = datetime(2013, 5, 5, 12, 30)
end = datetime(2013, 5, 5, 17, 15)
# 生成时间跨度范围
for span in arrow.Arrow.span_range('hour', start, end):
print(span)
# 生成时间点范围
for time in arrow.Arrow.range('hour', start, end):
print(time)
高级功能
自定义 Arrow 类型
可以创建自定义的 Arrow 派生类:
class CustomArrow(arrow.Arrow):
def days_till_xmas(self):
xmas = arrow.Arrow(self.year, 12, 25)
if self > xmas:
xmas = xmas.shift(years=1)
return (xmas - self).days
# 使用工厂创建自定义实例
factory = arrow.ArrowFactory(CustomArrow)
custom = factory.utcnow()
custom.days_till_xmas()
格式化标记转义
在解析和格式化时可以转义标记:
# 转义标记
fmt = "YYYY-MM-DD h [h] m"
arrow.get("2018-03-09 8 h 40", fmt)
# 转义短语
fmt = "YYYY-MM-DD h [hello world] m"
arrow.get("2018-03-09 8 hello world 40", fmt)
总结
Arrow 库通过简洁直观的 API 大大简化了 Python 中的时间处理工作。无论是时间创建、转换、格式化还是人性化显示,Arrow 都提供了比标准库更优雅的解决方案。本文涵盖了 Arrow 的主要功能,掌握这些内容将能应对大多数时间处理场景。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考