ZetCode

Python arrow

最后修改于 2024 年 1 月 29 日

在本文中,我们将介绍如何使用 arrow 模块在 Python 中处理日期和时间。

Python arrow

Arrow 是一个用于处理日期和时间的 Python 模块。与内置的日期和时间工具相比,它使得创建、操作、格式化和转换日期、时间和时间戳更加容易。

安装 arrow

使用以下命令安装 arrow 模块

$ sudo pip3 install arrow

我们使用 pip3 命令安装 arrow 模块。

UTC 时间

有一个实际的需求是统一一个全局时间。一个全局时间有助于避免时区和夏令时的混淆。UTC(协调世界时)是主要的计时标准。UTC 用于航空、天气预报、飞行计划、空中交通管制指令和地图。与本地时间不同,UTC 不会随着季节的变化而改变。

utc_time.py
#!/usr/bin/python

import arrow

utc = arrow.utcnow()
print(utc)
print(utc.to('local'))

UTC 时间是通过 utcnow 函数创建的。

print(utc.to('local'))

使用 to 方法,我们将 UTC 时间转换为本地时间。

本地时间

本地时间是特定地区或时区的时间。

local_time.py
#!/usr/bin/python

import arrow

now = arrow.now()
print(now)
print(now.to('UTC'))

本地时间是通过 now 函数创建的。to 方法用于将本地时间转换为 UTC 时间。

解析时间

get 方法用于解析时间。

parse_time.py
#!/usr/bin/python

import arrow

d1 = arrow.get('2012-06-05 16:20:03', 'YYYY-MM-DD HH:mm:ss')
print(d1)

d2 = arrow.get(1504384602)
print(d2)

该示例从日期时间字符串和时间戳解析时间。

$ ./parse_time.py 
2012-06-05T16:20:03+00:00
2017-09-02T20:36:42+00:00

Unix 时间

Unix 时间是从 Unix 纪元开始经过的秒数。timestamp 属性返回自 1970 年 1 月 1 日 0 时 0 分 0 秒(协调世界时)以来的时间秒数。

unix_time.py
#!/usr/bin/python

import arrow

utc = arrow.utcnow()
print(utc)

unix_time = utc.timestamp
print(unix_time)

date = arrow.Arrow.fromtimestamp(unix_time)
print(date)

该示例打印本地时间和 Unix 时间。然后它将 Unix 时间转换回日期对象。

date = arrow.Arrow.fromtimestamp(unix_time)

使用 fromtimestamp 方法,我们将 Unix 时间转换回 arrow 日期对象。

2017-09-02T21:57:11.483795+02:00
1504382231
2017-09-02T21:57:11+02:00

也可以将日期格式化为 Unix 时间。

format2unix.py
#!/usr/bin/python

import arrow

utc = arrow.utcnow()
    
print(utc.format('X'))

通过将 'X' 格式说明符传递给 format 方法,我们将当前本地日期打印为 Unix 时间。

$ ./format2unix.py 
1504383196

格式化日期和时间

日期和时间可以使用 format 方法进行格式化。

formatting.py
#!/usr/bin/python

import arrow

now = arrow.now()

year = now.format('YYYY')
print("Year: {0}".format(year))

date = now.format('YYYY-MM-DD')
print("Date: {0}".format(date))

date_time = now.format('YYYY-MM-DD HH:mm:ss')
print("Date and time: {0}".format(date_time))

date_time_zone = now.format('YYYY-MM-DD HH:mm:ss ZZ')
print("Date and time and zone: {0}".format(date_time_zone))

该示例通过利用 format 方法,以各种格式显示本地日期和时间。

$ ./formatting.py 
Year: 2017
Date: 2017-09-02
Date and time: 2017-09-02 22:00:32
Date and time and zone: 2017-09-02 22:00:32 +02:00

转换为区域时间

使用 to 方法,我们可以将日期和时间转换为区域时间。

converting.py
#!/usr/bin/python

import arrow

utc = arrow.utcnow()

print(utc.to('US/Pacific').format('HH:mm:ss'))
print(utc.to('Europe/Bratislava').format('HH:mm:ss'))
print(utc.to('Europe/Moscow').format('HH:mm:ss'))

该示例创建一个 UTC 时间并将其转换为三个区域时间。

$ ./converting.py 
13:24:06
22:24:06
23:24:06

这是输出。

获取星期几

可以使用 weekdayformat 方法查找日期的星期几。

weekday.py
#!/usr/bin/python

import arrow

d1 = arrow.get('1948-12-13')

print(d1.weekday())
print(d1.format('dddd'))

代码示例获取 '1948-12-13' 的星期几。

$ ./weekday.py 
0
Monday

1948 年 12 月 12 日是星期一。

时间偏移

shift 方法用于时间偏移。

shifting.py
#!/usr/bin/python

import arrow

now = arrow.now()

print(now.shift(hours=5).time())
print(now.shift(days=5).date())

print(now.shift(years=-8).date())

该示例计算当前本地时间并对其进行三次偏移。

print(now.shift(hours=5).time())

我们将时间向前偏移五个小时。

print(now.shift(days=5).date())

我们将日期向前偏移五天。

print(now.shift(years=-8).date())

在这里,我们将日期向后偏移八年。

$ ./shifting.py 
03:44:23.100887
2017-09-07
2009-09-02

夏令时

夏令时(DST)是在夏季将时钟拨快,以便傍晚日照时间更长的做法。在春季开始时时间向前调整一小时,在秋季向后调整为标准时间。

daylightsaving.py.py
#!/usr/bin/python

import arrow

now = arrow.now()

print(now.format("YYYY-MM-DD HH:mm:ss ZZ"))
print(now.dst())

该示例使用 dst 显示夏令时。

$ ./daylightsaving.py 
2017-09-02 22:46:37 +02:00
1:00:00

输出显示本地时间调整了一小时。

人性化日期和时间

在社交网站上,我们经常可以看到诸如“一小时前”或“5 分钟前”之类的术语,它们能快速地为人们提供有关帖子创建或修改时间的信息。Arrow 包含一个 humanize 方法来创建这些术语。

humanize.py
#!/usr/bin/python

import arrow

now = arrow.now()

d1 = now.shift(minutes=-15).humanize()
print(d1)

d2 = now.shift(hours=5).humanize()
print(d2)

该示例对两个日期进行了人性化处理。

$ ./humanizing.py 
15 minutes ago
in 4 hours

来源

Python arrow 文档

在本文中,我们使用 arrow 模块在 Python 中处理了日期和时间。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Python 教程