Python strftime 是 string format time 的缩写,它允许根据需要格式化日期和时间。顾名思义,您可以使用指定的 strftime 格式选项将给定的 datetime 对象转换为字符串表示。例如,您可以使用 strftime 将日期和时间转换为并显示为“YYYY-MM-DD”或“H:M:S”。
Python strftime 函数是 datetime、time 和 pandas 模块的一部分,您必须导入这些库。本文将介绍如何使用 strftime 解析 datetime 对象、可用格式代码表以及每个格式选项的示例。
Python strftime 函数
它用于格式化日期和时间并返回字符串表示。strftime 函数接受 datetime 对象作为输入,并使用指令对其进行格式化,然后以字符串形式返回输出。
Python datetime 模块中 strftime 函数的语法是
datetime_Object_Value.strftime(Directives)
可用 strftime 指令及其说明的列表。
| 指令 | 描述 | 输出 |
|---|---|---|
| %a | 工作日的缩写 | 周三 |
| %A | 工作日的完整名称 | 星期三 |
| %b | 月份名称的缩写 | 一月 |
| %B | 月份名称的完整名称 | 一月 |
| %c | 日期和时间的本地版本 | 2019 年 5 月 23 日星期四 10:35:32 |
| %d | 月份的日期号 01 到 31 | 23 |
| %f | 微秒 000000 到 999999 | 965060 |
| %H | 小时 00 到 23 | 15 |
| %I | 小时 00 到 12 | 10 |
| %j | 一年中的日期号 001 到 366 | 320 |
| %m | 月份作为数字 01 到 12 | 05 |
| %M | 分钟 00 到 59 | 35 |
| %p | 上午或下午 | 上午 |
| %S | 秒 00 到 59 | 32 |
| %U | 一年中的周数 00 到 53,其中一周的第一天 = 星期日 | 20 |
| %w | 工作日作为数字 0 到 6,其中 0 = 星期日 | 4 |
| %W | 一年中的周数 00 到 53,其中一周的第一天 = 星期一 | 20 |
| %x | 日期的本地版本 | 05/23/19 |
| %X | 时间的本地版本 | 10:35:32 |
| %y | 年份的缩写 | 19 |
| %Y | 年份的完整版本 | 2019 |
| %z | UTC 偏移量 | |
| %Z | 时区 | |
| %% | 一个 % 字符 | % |
datetime 模块中的 Python strftime
datetime 模块提供了各种处理日期和时间的函数;strftime 就是其中之一。要使用此 strftime 函数,您必须首先导入 datetime 模块。
import datetime
接下来,您需要一个 datetime 对象,因为此函数接受它作为输入。因此,使用 datetime 类创建一个对象。同样,此类有许多方法可以获取特定的日期和时间部分,我们已在另一篇文章中介绍过。
dt = datetime.datetime.now()
一旦您在 strftime 函数中拥有一个 datetime 对象,就可以使用上述任何指令以所需的格式显示日期和时间。以下示例列表给出了大多数常用代码的思路。
Python datetime strftime 示例
此 strftime 示例使用 datetime 类的 now() 函数获取当前数据。接下来,我们使用 strftime 函数从今天的日期和时间返回年份、月份名称、月份编号、日期编号等。
使用此函数从今天的日期获取年份、月份名称、月份编号和日期编号。
from datetime import datetime
dt = datetime.now()
print('Current Date = ', dt)
print('Year in Short = ', dt.strftime('%y'))
print('Current Year = ', dt.strftime('%Y'))
print('Month Name in Short = ', dt.strftime('%b'))
print('Month Name = ', dt.strftime('%B'))
print('Month Number = ', dt.strftime('%m'))
print('Day Number of the Month = ', dt.strftime('%d'))
print('Day Number of the Year = ', dt.strftime('%j'))
print('Week No of Year 00 to 53 = ', dt.strftime('%U'))
print('Week Number of Year = ', dt.strftime('%W'))
print('Short Version of Weekday = ', dt.strftime('%a'))
print('Full Version of Weekday = ', dt.strftime('%A'))
print('Weekday as a Number = ', dt.strftime('%w'))
Current Date = 2023-05-12 15:27:30.520082
Year in Short = 23
Current Year = 2023
Month Name in Short = May
Month Name = May
Month Number = 05
Day Number of the Month = 12
Day Number of the Year = 132
Week No of Year 00 to 53 = 19
Week Number of Year = 19
Short Version of Weekday = Fri
Full Version of Weekday = Friday
Weekday as a Number = 5
从时间戳创建字符串
from datetime import datetime
timestamp = 1487958621
dt = datetime.fromtimestamp(timestamp)
print("datetime object =", dt)
a = dt.strftime("%d/%m/%Y, %H:%M:%S")
print("Example 1 =", a)
b = dt.strftime("%A %d %b, %Y")
print("Example 2 =", b)
c = dt.strftime("%d %B, %Y")
print("Example 3 =", c)
d = dt.strftime("%I %p")
print("Example 4 =", d)
datetime object = 2017-02-24 23:20:21
Example 1 = 24/02/2017, 23:20:21
Example 2 = Friday 24 Feb, 2017
Example 3 = 24 February, 2017
Example 4 = 11 PM
使用区域设置格式化 datetime
我们使用 Python strftime 函数返回当前日期和时间的日期、时间和日期时间的本地版本。
from datetime import datetime
dt = datetime.now()
print(dt)
print('Local Version = ', dt.strftime('%c'))
print('Local Version of Dt = ', dt.strftime('%x'))
print('Local Version of Tm = ', dt.strftime('%X'))
2021-05-02 16:00:01.379106
Local Version = Sun May 2 16:00:01 2021
Local Version of Dt = 05/02/21
Local Version of Tm = 16:00:01
将时间转换为字符串格式
让我使用 strftime 从当前 DateTime 类返回小时、分钟、秒、微秒、上午或下午。
from datetime import datetime
dt = datetime.now()
print(dt)
print('Hours = ', dt.strftime('%H'))
print('Hours = ', dt.strftime('%I'))
print('Minutes = ', dt.strftime('%M'))
print('Seconds = ', dt.strftime('%S'))
print('Microseconds = ', dt.strftime('%f'))
print('AM or PM = ', dt.strftime('%p'))
print('% Charcter = ', dt.strftime('%%'))
使用此方法输出打印小时、分钟、秒和微秒
2021-05-02 15:57:46.656409
Hours = 15
Hours = 03
Minutes = 57
Seconds = 46
Microseconds = 656409
AM or PM = PM
% Charcter = %
strftime 格式化 DateTime 对象
到目前为止,我们正在使用一个 Python 指令返回日期的一部分。但是,以所需格式格式化日期和时间非常有用。它以年/月/日 时:分:秒 上午/下午 的形式显示当前日期和时间。
import datetime
dt = datetime.datetime.now()
print(dt)
print(dt.strftime('%Y/%m/%d %H:%M:%S %p'))
2021-05-02 15:54:05.603666
2021/05/02 15:54:05 PM
更多格式化选项。

time 模块中的 Python strftime 示例
在此编程中,除了 datetime 模块,time 模块也有 strftime 函数。要使用它,您必须导入 time 库。
time 模块中 strftime 函数的语法如下所示。
time.strftime(Directives, time_object_value)
time 示例
在这里,我们使用了 time 库中的 localtime 函数,并应用了一些可用的 strftime 格式代码。
import time
dt = time.localtime(1234567)
print(time.strftime('%Y/%M/%d %H:%M:%S %p', dt))
print(time.strftime('%m/%d/%y %H:%M:%S', dt))
print(time.strftime('%d-%m-%Y %I:%M:%S %p', dt))
print(time.strftime('%I:%M:%S %p', dt))
1970/26/15 12:26:07 PM
01/15/70 12:26:07
15-01-1970 12:26:07 PM
12:26:07 PM
pandas 模块中的 Python strftime 函数
pandas 模块中可用的 strftime 函数是最强大的一个。pandas 允许您将 strftime 应用于 DataFrame 和 Series,而不是应用于 datetime 对象。因此,您可以使用此函数格式化完整表格中的日期和时间。
Series 示例
在此示例中,我们声明了一个日期序列,并使用带有 %A %d %B %Y %H:%M:%S %p 格式的 strftime 函数来显示工作日名称、日期号、月份名称、年份、小时、分钟、秒以及上午或下午。
import pandas as pd
data = pd.Series(['2015-04-06', '2016-05-10', '2017-06-15', '2018-07-25'])
dts = pd.to_datetime(data)
formatted = dts.dt.strftime('%A %d %B %Y %H:%M:%S %p')
print(formatted)
0 Monday 06 April 2015 00:00:00 AM
1 Tuesday 10 May 2016 00:00:00 AM
2 Thursday 15 June 2017 00:00:00 AM
3 Wednesday 25 July 2018 00:00:00 AM
dtype: object
DataFrame 示例
这个简单的示例展示了如何使用此函数将表格中的日期和时间列转换为给定格式的字符串表示。
import pandas as pd
data = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
'Age': [25, 32, 30, 26],
'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
'Salary':[10000, 12000, 9000, 11000],
'date': ['2015-04-06', '2016-05-09', '2017-06-11', '2018-07-25']
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df['formatted'] = df['date'].dt.strftime('%A, %d %B %Y')
print(df)
name Age Profession Salary date formatted
0 John 25 Developer 10000 2015-04-06 Monday, 06 April 2015
1 Mike 32 Analyst 12000 2016-05-09 Monday, 09 May 2016
2 Suresh 30 Admin 9000 2017-06-11 Sunday, 11 June 2017
3 Tracy 26 HR 11000 2018-07-25 Wednesday, 25 July 2018