探索 Python 库:Arrow

发布日期:2026-07-19 08:56:04  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 08:56:04  
0

介绍

作为 Python 用户,您可能在处理日期和时间格式时遇到很多麻烦,例如将一种日期时间格式转换为另一种时区格式,使用手动构建的函数来改变天、小时、分钟等。您可能最终会使用许多库,例如datetimetimedateutil等,但仍然需要编写大量额外的代码。相反,如果您学习一个库,它提供了所有主要的库功能,最重要的是,它提供了额外的功能,让您可以减少代码编写量,那会怎样?

在本指南中,您将通过探索以下主题来了解Arrow库:

  • 建筑数据
  • 处理数据
  • 人性化数据
  • 提取数据
  • 语言转换

在深入研究这些主题之前,您应该使用命令pip install arrow安装 Arrow 库。本指南中的所有代码示例都假定您已使用命令import arrow导入了该库。

建筑数据

如果您想要获取某个时区的时间戳,请在now()函数中提及其表达式。表达式可以是US/PacificUS/MountainEurope/Berlin等。如果您未在now()函数中提及时区,您将收到时区的数据。下面是一个获取时间戳并提取其各个组成部分(如小时、天、秒等)的示例。

      arw = arrow.now('Europe/Berlin')
print(arw)
# 2020-06-08T23:03:01.688314+02:00

print( arw.day, arw.month, arw.year, arw.hour, arw.minute, arw.second )
# (8, 6, 2020, 23, 6, 56)
    

接下来,尝试使用get()函数将时间戳值转换为箭头时间戳。原始时间戳可以是intfloat数据类型。

      arw = arrow.get(1592901654)
print(arw)
# 2020-06-23T08:40:54+00:00
    

处理数据

有时您可能会得到错误的数据,或者您可能想要完全更新时间戳。无论是哪种情况,您都可以直接使用 Arrow 的replace()shift()函数执行此类操作。

这里有几个有趣的例子来解释这两种功能。

您之前的马拉松数据库的最佳记录时间为 2:19:10。现在,一位新跑步者打破了记录,将其设置为 2:09:10。您将如何更新数据库中的新记录?在继续之前,请注意,除分钟外,两条记录中的小时和秒数据都是相同的。因此,您只需要更新分钟数据:

      arw = arrow.get(1592705950)
print(arw, '|', arw.replace(minute=9))
# 2020-06-21T02:19:10+00:00 | 2020-06-21T02:09:10+00:00
    

假设雨季从今天开始,并且可能持续到接下来的两周。你有今天的时间戳,如何将其更新到接下来的两周?好吧,你可以使用 shift ()函数为你进行计算,如本例所示:

      arw = arrow.get(1592705950)
print(arw, '|', arw.shift(weeks=2))
# 2020-06-21T02:19:10+00:00 | 2020-07-05T02:19:10+00:00
    

人性化数据

您是否曾想过,是否可以以“两天后”而不是“2020-05-25T14:45:53.516031-07:00”的格式接收时间和日期?除了这个小例子,您还可以做更多的事情。Arrow 库通过结合语言(不仅仅是英语!)和数字为您提供了保留日期和时间的好处。以下是一些示例,解释了 humanize ()函数如何节省您读取日期和时间的时间:

      arw = arrow.now('US/Pacific')
print(arw.humanize())
# just now

arw = arw.shift(weeks=-2)
print(arw)
print(arw.humanize())
# 2 weeks ago

arw = arw.replace(minute=30)
print(arw.humanize()) # No change
# 2 weeks ago

arw = arw.shift(years=+4)
print(arw.humanize(granularity=["year", "day", "hour", "minute"]))
# in 3 years 351 days 5 hours and 47 minutes
    

正如您在代码的最后一行中看到的,您可以精确选择结果应以哪个时间范围形成。默认情况下,它将是您更改的最后一个粒度,否则它将遵循函数中提到的粒度。

提取数据

假设您有一个句子,其中包含需要提取的日期或时间值。通常,您可能会编写正则表达式来匹配记录并获取数据。但是,Arrow 库会为您处理这个问题。使用基本的get()函数以及格式,您将收到如下所示的数据:

      sentence = "I went to picnic with my college friends on 2020-01-28. We all spent a good time together"
arw = arrow.get(sentence, "YYYY-MM-DD")
print(arw)
# 2020-01-28T00:00:00+00:00
    

对于更复杂的数据,您仍然可以依靠正则表达式来提取数据,如下所示:

      sentence = "I went to picnic with my college friends on 2020      Jan 28       8 o'clock. We all spent a good time together"
fmt = r"YYYY[\s+]MMM[\s+]DD[\s+]H"
print(arrow.get(sentence, fmt))
# 2020-01-28T08:00:00+00:00
    

在上面的例子中,数据被随机空格分隔,但我们仍然可以提取它。请确保使用正确的令牌。请参阅此处了解支持的令牌。

语言转换

Arrow 库有一个专用模块locales.py,支持多种语言来显示最终结果。在此示例中,选择了法语和希腊语来显示其正常运行:

      arw = arrow.utcnow()
print(arw.shift(years=5, months=8, weeks=1).humanize(granularity=['year', 'day','month','minute','second'], locale='en'))
# in 5 years 8 months 7 days 1080 minutes and 0 seconds

arw = arrow.utcnow()
print(arw.shift(years=5, months=8, weeks=1).humanize(granularity=['year', 'day','month','minute','second'], locale='fr'))
# dans 5 ans 8 mois 7 jours 1080 minutes et 0 quelques secondes

arw = arrow.utcnow()
print(arw.shift(years=5, months=8, weeks=1).humanize(granularity=['year', 'day','month','minute','second'], locale='el'))
# σε 5 χρόνια 8 μήνες 7 μέρες 1080 λεπτά και 0 δευτερόλεπτα
    

结论

Arrow 库为您提供与日期和时间数据相关的所有问题的一站式解决方案。它结合了各种库的功能,并提供了一个附加模块locale,以根据您的语言要求显示结果。

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据