# Python `strptime()`

> 原文： [https://www.programiz.com/python-programming/datetime/strptime](https://www.programiz.com/python-programming/datetime/strptime)

#### 在本文中，您将学习从字符串创建`datetime`对象（借助示例）。

`strptime()`方法根据给定的字符串创建[日期时间](/python-programming/datetime#datetime)对象。

**注意**：不能从每个字符串创建`datetime`对象。 该字符串必须采用某种格式。

* * *

## 示例 1：日期时间对象的字符串

```py
 from datetime import datetime

date_string = "21 June, 2018"

print("date_string =", date_string)
print("type of date_string =", type(date_string))

date_object = datetime.strptime(date_string, "%d %B, %Y")

print("date_object =", date_object)
print("type of date_object =", type(date_object)) 
```

运行该程序时，输出为：

```py
 date_string = 21 June, 2018
type of date_string = <class 'str'>
date_object = 2018-06-21 00:00:00
type of date_object = <class 'datetime.datetime'> 
```

* * *

### `strptime()`如何工作？

`strptime()`类方法采用两个参数：

*   字符串（将转换为日期时间）
*   格式码

根据使用的字符串和格式代码，该方法返回其等效的`datetime`对象。

在上面的示例中：

![How strptime() works in Python?](img/0115f8704c03635ff3fd4f66c222c81a.png)

这里，

*   `%d`-代表每月的某天。 **示例**： 01，02，...，31
*   `%B`-月份的全名。 **示例**：一月，二月等
*   `%Y`-四位数的年份。 **示例**： 2018，2019 等

* * *

## 示例 2：日期时间对象的字符串

```py
 from datetime import datetime

dt_string = "12/11/2018 09:15:32"

# Considering date is in dd/mm/yyyy format
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)

# Considering date is in mm/dd/yyyy format
dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2) 
```

当你运行程序时，输出将是：

```py
dt_object1 = 2018-11-12 09:15:32
dt_object2 = 2018-12-11 09:15:32 
```

* * *

## 格式代码列表

下表显示了您可以使用的所有格式代码。

| **指令** | **含义** | **示例** |
| --- | --- | --- |
| `%a` | 工作日名称的缩写。 | 周日，周一... |
| `%A` | 工作日全名。 | 星期天星期一， ... |
| `%w` | 工作日为十进制数字。 | 0, 1, ..., 6 |
| `%d` | 月份中的一天，以零填充的十进制数表示。 | 01, 02, ..., 31 |
| `%-d` | 以十进制数字表示的月份中的一天。 | 1, 2, ..., 30 |
| `%b` | 缩写的月份名称。 | 一月，二月，...，十二月 |
| `%B` | 完整的月份名称。 | 一月二月， ... |
| `%m` | 以零填充的十进制数字表示的月份。 | 01, 02, ..., 12 |
| `%-m` | 以十进制数表示的月份。 | 1, 2, ..., 12 |
| `%y` | 无世纪的年份，为零填充的十进制数字。 | 00, 01, ..., 99 |
| `%-y` | 没有世纪的年份作为十进制数字。 | 0, 1, ..., 99 |
| `%Y` | 以世纪作为十进制数字的年份。 | 2013、2019 等 |
| `%H` | 小时（24 小时制），为补零的十进制数字。 | 00, 01, ..., 23 |
| `%-H` | 小时（24 小时制）为十进制数字。 | 0, 1, ..., 23 |
| `%I` | 小时（12 小时制），为零填充的十进制数字。 | 01, 02, ..., 12 |
| `%-I` | 小时（12 小时制）为十进制数字。 | 1, 2, ... 12 |
| `%p` | 语言环境的上午或下午。 | 上午下午 |
| `%M` | 分钟，为零填充的十进制数字。 | 00, 01, ..., 59 |
| `%-M` | 以十进制数字表示。 | 0, 1, ..., 59 |
| `%S` | 第二个为零填充的十进制数。 | 00, 01, ..., 59 |
| `%-S` | 第二个十进制数字。 | 0, 1, ..., 59 |
| `%f` | 微秒，十进制数，在左侧补零。 | 000000 - 999999 |
| `%z` | UTC 偏移量，格式为`+HHMM`或`-HHMM`。 |   |
| `%Z` | 时区名称。 |   |
| `%j` | 一年中的一天，以零填充的十进制数字表示。 | 001, 002, ..., 366 |
| `%-j` | 一年中的天，以十进制数字表示。 | 1, 2, ..., 366 |
| `%U` | 一年中的第几周（星期日为一周的第一天）。 新年中第一个星期日之前的所有天均视为第 0 周。 | 00, 01, ..., 53 |
| `%W` | 一年中的第几周（星期一为一周的第一天）。 第一个星期一之前的新的一年中的所有天都视为在第 0 周。 | 00, 01, ..., 53 |
| `%c` | 语言环境的适当日期和时间表示。 | 2013 年 9 月 30 日星期一 07:06:05 |
| `%x` | 语言环境的适当日期表示形式。 | 09/30/13 |
| `%X` | 语言环境的适当时间表示形式。 | 07:06:05 |
| `%%` | 文字`%`字符。 | % |

* * *

### `strptime()`中的`ValueError`

如果传递给`strptime()`的字符串（第一个参数）和格式代码（第二个参数）不匹配，则会得到`ValueError`。 例如：

```py
 from datetime import datetime

date_string = "12/11/2018"
date_object = datetime.strptime(date_string, "%d %m %Y")

print("date_object =", date_object) 
```

如果运行此程序，则会出现错误。

```py
ValueError: time data '12/11/2018' does not match format '%d %m %Y' 
```

* * *

**推荐阅读**： [Python `strftime()`](/python-programming/datetime/strftime)