# Python `strftime()`

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

#### 在本文中，您将学习如何将日期，时间和日期时间对象转换为其等效的字符串（借助示例）

`strftime()`方法使用[日期](/python-programming/datetime#date)，[时间](/python-programming/datetime#time)或 [datetime](/python-programming/datetime#datetime) 对象返回表示日期和时间的字符串。

* * *

## 示例 1：使用`strftime()`将日期时间转换为字符串

下面的程序将包含当前日期和时间的`datetime`对象转换为不同的字符串格式。

```py
 from datetime import datetime

now = datetime.now() # current date and time

year = now.strftime("%Y")
print("year:", year)

month = now.strftime("%m")
print("month:", month)

day = now.strftime("%d")
print("day:", day)

time = now.strftime("%H:%M:%S")
print("time:", time)

date_time = now.strftime("%m/%d/%Y, %H:%M:%S")
print("date and time:",date_time) 
```

运行程序时，输出将如下所示：

```py
 year: 2018
month: 12
day: 24
time: 04:59:31
date and time: 12/24/2018, 04:59:31 
```

这里，`year`，`day`，`time`和`date_time`是字符串，而`now`是`datetime`对象。

* * *

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

在上述程序中，`%Y`，`%m`，`%d`等是格式代码。`strftime()`方法采用一个或多个格式代码作为参数，并基于该代码返回格式化的字符串。

1.  我们从`datetime`模块导入了`datetime`类。 这是因为`datetime`类的对象可以访问`strftime()`方法。

    ![Import datetime module in Python](img/6ffb8cd5e0ca354d9502d7309a685cdb.png)

2.  包含当前日期和时间的`datetime`对象存储在`now`变量中。

    ![datetime object containing current date and time](img/0a9344ea18152f8a0a0898e93d54f80a.png)

3.  `strftime()`方法可用于创建格式化的字符串。

    ![Python strftime() example](img/782f065f6a4c964698085e24e5e8d5a6.png)

4.  您传递给`strftime()`方法的字符串可能包含多个格式代码。

    ![Python strftime() example](img/f4dad21b7512fdb586bf10c44dd59781.png)

* * *

## 示例 2：根据时间戳创建字符串

```py
 from datetime import datetime

timestamp = 1528797322
date_time = datetime.fromtimestamp(timestamp)

print("Date time object:", date_time)

d = date_time.strftime("%m/%d/%Y, %H:%M:%S")
print("Output 2:", d)	

d = date_time.strftime("%d %b, %Y")
print("Output 3:", d)

d = date_time.strftime("%d %B, %Y")
print("Output 4:", d)

d = date_time.strftime("%I%p")
print("Output 5:", d) 
```

运行该程序时，输出为：

```py
Date time object: 2018-06-12 09:55:22
Output 2: 06/12/2018, 09:55:22
Output 3: 12 Jun, 2018
Output 4: 12 June, 2018
Output 5: 09AM 
```

* * *

## 格式代码列表

下表显示了您可以传递给`strftime()`方法的所有代码。

| **指令** | **含义** | **示例** |
| --- | --- | --- |
| `%a` | 缩写的工作日名称。 | `Sun, Mon, ...` |
| `%A` | 完整的工作日名称。 | `Sunday, Monday, ...` |
| `%w` | 工作日，表示为十进制数字。 | `0, 1, ..., 6` |
| `%d` | 月份中的一天，表示为以零填充的十进制数。 | `01, 02, ..., 31` |
| `%-d` | 月份中的一天，表示为无填充的十进制数字。 | `1, 2, ..., 30` |
| `%b` | 缩写的月份名称。 | `Jan, Feb, ..., Dec` |
| `%B` | 完整的月份名称。 | `January, February, ...` |
| `%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` | 语言环境的上午或下午。 | `AM, PM` |
| `%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` | 适合语言环境的日期和时间表示。 | `Mon Sep 30 07:06:05 2013` |
| `%x` | 适合语言环境的日期表示形式。 | `09/30/13` |
| `%X` | 适合语言环境的时间表示形式。 | `07:06:05` |
| `%%` | 文字`%`字符。 | `%` |

* * *

## 示例 3：语言环境的适当日期和时间

```py
 from datetime import datetime

timestamp = 1528797322
date_time = datetime.fromtimestamp(timestamp)

d = date_time.strftime("%c")
print("Output 1:", d)	

d = date_time.strftime("%x")
print("Output 2:", d)

d = date_time.strftime("%X")
print("Output 3:", d) 
```

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

```py
 Output 1: Tue Jun 12 09:55:22 2018
Output 2: 06/12/18
Output 3: 09:55:22 
```

格式代码`%c`，`%x`和`%X`用于语言环境的适当日期和时间表示。

* * *

我们还建议您检查 [Python `strptime()`](/python-programming/datetime/strptime "strptime()")。`strptime()`方法从字符串创建`datetime`对象。