strptime()
方法从给定的字符串创建 datetime 对象。
注意:你不能从所有字符串中创建 datetime
对象。字符串需要采用特定格式。
示例 1:字符串到日期时间对象
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))
运行程序后,输出将是
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
对象。
在上面的示例中

这里,
%d
- 表示月份中的日期。示例: 01, 02, ..., 31%B
- 月份的全名。示例: January, February 等%Y
- 四位数的年份。示例: 2018, 2019 等
示例 2:字符串到日期时间对象
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)
运行程序后,输出将是
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 |
区域设置的 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 |
%% |
字面量 '%' 字符。 | % |
strptime() 中的 ValueError
如果传递给 strptime()
的字符串(第一个参数)和格式代码(第二个参数)不匹配,你将收到 ValueError
。例如
from datetime import datetime
date_string = "12/11/2018"
date_object = datetime.strptime(date_string, "%d %m %Y")
print("date_object =", date_object)
如果你运行这个程序,你会得到一个错误。
ValueError: time data '12/11/2018' does not match format '%d %m %Y'
另请阅读