Arrow 时间处理库使用指南

Arrow 时间处理库使用指南

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 的主要功能,掌握这些内容将能应对大多数时间处理场景。

arrow arrow 项目地址: https://gitcode.com/gh_mirrors/arr/arrow

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛炎宝Gardener

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值