在本文中,您将学习如何从字符串创建datetime对象(在示例的帮助下)。
strptime()方法从给定的字符串创建datetime对象。
注意:您不能从每个字符串创建datetime对象。该字符串必须采用某种格式。
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
print("date_string数据类型 =", type(date_string))
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print("date_object数据类型 =", type(date_object))运行该程序时,输出为:
date_string = 21 June, 2018 date_string 数据类型 = <class 'str'> date_object = 2018-06-21 00:00:00 date_object 数据类型 = <class 'datetime.datetime'>
strptime()类方法有两个参数:
字符串(将转换为日期时间)
格式代码
根据使用的字符串和格式代码,该方法返回其等效datetime对象。
在上面的示例中:

这里,
%d-表示每月的一天。示例: 01,02,...,31
%B-月份的全名。例如:January, February等
%Y-年份以四位数表示。例如: 2018、2019等
from datetime import datetime
dt_string = "12/11/2019 09:15:32"
# 日期为dd / mm / yyyy格式
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# 日期为mm / dd / yyyy格式
dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2)运行该程序时,输出为:
dt_object1 = 2019-11-12 09:15:32 dt_object2 = 2019-12-11 09:15:32
下表显示了您可以使用的所有格式代码。
| 指令 | 含义 | 实例 |
| %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 2 |
| %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 | 语言环境的适当日期表示形式。 | 13/9/30 |
| %X | 语言环境的适当时间表示形式。 | 07:06:05 |
| %% | 文字“%”字符。 | % |
如果传递给的字符串(第一个参数)和格式代码(第二个参数)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'
推荐阅读: Python strftime()