# Python Arrow 教程

> 原文： [http://zetcode.com/python/arrow/](http://zetcode.com/python/arrow/)

Python Arrow 教程显示了如何在带有箭头模块的 Python 中使用日期和时间。

## Python Arrow 

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

## 安装 Arrow 

Arrow 模块使用以下命令安装：

```py
$ sudo pip3 install arrow

```

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

## UTC 时间

实际需要一个全球时间。 全球时间可以避免时区和夏令时的混淆。 UTC（世界标准时间）是主要时间标准。 UTC 用于航空，天气预报，飞行计划，空中交通管制通关和映射。 与当地时间不同，UTC 不会随季节变化而变化。

`utc_time.py`

```py
#!/usr/bin/python3

import arrow

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

```

使用`utcnow()`函数创建 UTC 时间。

```py
print(utc.to('local'))

```

使用`to()`方法，我们将 UTC 时间转换为本地时间。

## 当地时间

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

`local_time.py`

```py
#!/usr/bin/python3

import arrow

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

```

使用`now()`函数创建本地时间。 `to()`方法用于将本地时间转换为 UTC 时间。

## 解析时间

`get()`方法用于解析时间。

`parse_time.py`

```py
#!/usr/bin/python3

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)

```

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

```py
$ ./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`

```py
#!/usr/bin/python3

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`对象。

```py
date = arrow.Arrow.fromtimestamp(unix_time)

```

使用`fromtimestamp()`方法，我们将 Unix 时间转换回箭头日期对象。

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

```

这是输出。

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

`format2unix.py`

```py
#!/usr/bin/python3

import arrow

utc = arrow.utcnow()

print(utc.format('X'))

```

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

```py
$ ./format2unix.py 
1504383196

```

这是输出。

## 格式化日期和时间

日期和时间可以用`format()`方法格式化。

`formatting.py`

```py
#!/usr/bin/python3

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()`方法以各种格式显示本地日期和时间。

```py
$ ./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`

```py
#!/usr/bin/python3

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 时间并将其转换为三个区域时间。

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

```

这是输出。

## 工作日

可以使用`weekday()`或`format()`方法找到日期的工作日。

`weekday.py`

```py
#!/usr/bin/python3

import arrow

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

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

```

该代码示例的工作日为`"1948-12-13"`。

```py
$ ./weekday.py 
0
Monday

```

1948 年 12 月 12 日，是星期一。

## 移动时间

`shift()`方法用于移动时间。

`shifting.py`

```py
#!/usr/bin/python3

import arrow

now = arrow.now()

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

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

```

该示例计算当前本地时间并将其偏移三倍。

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

```

我们将时间提前了五个小时。

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

```

我们将日期提前五天。

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

```

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

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

```

这是输出。

## 夏令时

夏令时（DST）是在夏季的几个月中增加时钟的一种做法，因此晚上的夏时制持续时间更长。 在春季开始时将时间向前调整一小时，在秋季将时间向后调整为标准时间。

`daylightsaving.py.py`

```py
#!/usr/bin/python3

import arrow

now = arrow.now()

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

```

该示例使用`dst()`显示夏令时。

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

```

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

## 人性化的日期和时间

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

`humanize.py`

```py
#!/usr/bin/python3

import arrow

now = arrow.now()

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

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

```

该示例将两个日期人性化。

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

```

这是输出。

在本教程中，我们使用带有箭头模块的 Python 中的日期和时间。

您可能也对以下相关教程感兴趣： [Beautifulsoup 教程](/python/beautifulsoup)， [Python 教程](/lang/python/)， [Python 列表推导式](/articles/pythonlistcomprehensions/)， [OpenPyXL 教程](/articles/openpyxl/)，Python Requests 教程和 [Python CSV 教程](/python/csv/)。