Python strptime 是“string to parse”(解析字符串)的缩写,它能帮助您将日期和时间的字符串表示形式解析为 datetime 对象。日期和时间在数据分析或处理中至关重要。因此,我们必须将它们从字符串类型转换为 datetime,以便进一步分析。
Python strptime 函数在 datetime、pandas 和 time 模块中可用。它接受字符串日期作为第一个参数,格式说明符作为第二个参数。然后,它将字符串转换为 datetime 对象。
这篇 Python 博客文章将探讨 strptime 函数、可用的格式化选项、多个示例以及 ValueError 的处理。我们日常工作中使用的部分日期和时间格式有:
- 日期和时间格式示例:yyyy-mm-dd hh:mm:ss 或 dd MMM yyyy hh:mm:ss AM/PM。
- 仅日期格式示例:yyyy-mm-dd、dd MMM yyyy、dd/mm/yyyy 或 mm/dd/yyyy。
- 仅时间格式示例:hh:mm:ss 或 hh:mm AM/PM。
Python datetime strptime
该模块具有 strptime 函数,它将接受日期和时间字符串并将它们转换为 datetime 对象。要使用此函数,我们必须导入 datetime 模块。
datetime 模块中 Python strptime 函数的语法如下。
datetime.strptime(string_value, format) # format using directives
从上述语法中,format 参数使用以 % 符号开头的指令来指示格式代码。以下是可用的 Python strptime 指令列表。请记住,这些指令与 strftime 函数中用于格式化日期和时间的指令相同。
- %a – 星期几的缩写(Wed)
- %A – 星期几的全称(Wednesday)
- %b – 月份名称的缩写(Jan)
- %B – 月份名称的全称(January)
- %c – 日期和时间的本地表示
- %d – 月份中的日期(01 到 31)
- %f – 微秒(000000 到 999999)
- %H – 小时(00 到 23)
- %I – 小时(00 到 12)
- %j – 年份中的天数(001 到 366)
- %m – 月份数字(01 到 12)
- %M – 分钟(00 到 59)
- %p – Python strptime 函数返回 AM 或 PM
- %S – 秒(00 到 59)
- %U – 年份中的周数(00 到 53),其中一周的第一天 = 星期日
- %w – 星期几的数字(0 到 6),其中 0 = 星期日
- %W – 年份中的周数(00 到 53),其中一周的第一天 = 星期一
- %x – 日期的本地表示(05/23/19)
- %X – 时间的本地表示(10:45:32)
- %y – 年份的缩写(19)
- %Y – 年份的全称(2019)
- %z – UTC 偏移量
- %Z – 时区
datetime 模块中 Python strptime 示例
strptime 函数根据格式代码(指令)解析日期和时间 string_value 并返回一个 datetime 对象。让我展示一个简单的示例来理解语法并解释此函数的使用方法。
from datetime import datetime string_value = "2019-12-31 11:59:58" dt_format = "%Y-%m-%d %H:%M:%S" parsed_dt = datetime.strptime(string_value, dt_format) print(parsed_dt)
2019-12-31 11:59:58
strptime 如何工作?
程序的第一行从 datetime 模块导入 datatime 对象。
from datetime import datetime
在接下来的两行中,我们声明了一个字符串日期和时间以及带有指令的匹配格式。
以下语句使用 datetime 类中可用的 strptime 函数,并将字符串日期和时间转换为 datetime 对象。
parsed_dt = datetime.strptime(string_value, dt_format)
Python strptime 解析日期字符串
第一个语句函数将给定日期字符串(日/月/年格式)转换为 DateTime 的本地版本,其中时间等于 00:00:00。
在接下来的两个语句中,我们将日期号、月份名称和完整年份解析为 strptime 函数,并返回日期和时间。
from datetime import datetime as dm
dvalue = dm.strptime('30/12/18', '%d/%m/%y')
print(dvalue)
dt_string = '31 December 2018'
value = dm.strptime(dt_string, '%d %B %Y')
print(value)
dt_str = '31 December 17'
dt_value = dm.strptime(dt_str, '%d %B %y')
print(dt_value)
2018-12-30 00:00:00
2018-12-31 00:00:00
2017-12-31 00:00:00
Python strptime 解析或转换时间字符串
此示例接受“11:45:58”时间,并使用“%H:%M:%S”格式解析时间字符串。默认情况下,strptime 函数解析并返回日期和时间。因此,您必须显式使用 time() 函数来调用它的部分。下面代码中的第一个 print 语句返回默认日期和解析时间:第二个语句解析并仅返回时间部分。
from datetime import datetime as dt
strTime = "11:45:58"
parsed_time = dt.strptime(strTime, "%H:%M:%S")
print("Parsed DateTime:", parsed_time)
print("Parsed time:", parsed_time.time())
Parsed DateTime: 1900-01-01 11:45:58
Parsed time: 11:45:58
在上面的示例中,我们声明了一个时间并显示了它。但是,如果您只想解析时间部分,请使用 datetime 类中的 time() 函数。
from datetime import datetime as dt
dt_str = '10/05/18 23:59:58'
dt_value = dt.strptime(dt_str, '%d/%m/%y %H:%M:%S')
print("Parsed DateTime:", dt_value)
print("Parsed time:", dt_value.time())
Parsed DateTime: 2018-05-10 23:59:58
Parsed time: 23:59:58
解析日期和时间字符串
让我使用此 strptime 从给定日期号、月份、年份、小时、分钟和秒的字符串表示中返回 DateTime。
from datetime import datetime as stp dt_str = '31/12/18 23:59:58' dt_value = stp.strptime(dt_str, '%d/%m/%y %H:%M:%S') print(dt_value) dt_str2 = '10-12-2017 19:12:58' dt_value2 = stp.strptime(dt_str2, '%d-%m-%Y %H:%M:%S') print(dt_value2)
使用此函数从给定的小时、分钟和秒打印日期和时间。请参阅 Python 中的 strftime。

Python strptime 转换日期和时间字符串列表
在此示例中,我们声明了一个日期和时间字符串数据类型列表。for 循环迭代每个日期,strptime 会将它们转换为 datetime 对象。
from datetime import datetime
data = ["10/05/16 01:10:8.030", "12/06/17 10:30:8.110",
"15/07/18 22:19:5.9478", "30/08/19 10:11:6.045",
"22/09/20 14:11:6.054"]
formatInfo = "%d/%m/%y %H:%M:%S.%f"
for i in data:
print(datetime.strptime(i, formatInfo))
2016-05-10 01:10:08.030000
2017-06-12 10:30:08.110000
2018-07-15 22:19:05.947800
2019-08-30 10:11:06.045000
2020-09-22 14:11:06.054000
解析带 AM/PM 指示符的字符串
下面的 %p 指令帮助 strptime 函数解析 PM 指示符。您可以将 PM 替换为 AM 并检查结果。
from datetime import datetime
str_time = "10:45 PM"
res = datetime.strptime(str_time, "%I:%M %p")
print("Parsed time:", res.time())
Parsed time: 22:45:00
Python strptime 转换带有时区偏移量的字符串
处理日期时,时区在处理日期时起着重要作用,因为一个错误就会完全改变日期。所以,你必须非常小心地使用正确的格式并多次检查。
在此 strptime 示例中,我们使用了日期、时间和五小时三十分钟的时区偏移量,即 +0530。为了解析带有时区的字符串,我们使用了 %z 指令。
如果您观察结果,它包含解析后的日期、时间和时区偏移信息。
from datetime import datetime
dt_str = "2019-12-31 12:30:42 +0530"
dt_format = "%Y-%m-%d %H:%M:%S %z"
dt_obj = datetime.strptime(dt_str, dt_format)
print("Parsed = ", dt_obj)
Parsed = 2019-12-31 12:30:42+05:30
strptime 中处理毫秒
在此编程语言中,我们可以在 datetime strptime 函数中使用 %f 格式说明符来解析或处理毫秒。
from datetime import datetime
dt_str = "2022-05-13 09:30:00.123456"
dt_format = "%Y-%m-%d %H:%M:%S.%f"
res = datetime.strptime(dt_str, dt_format)
print("Result = ", res)
Result = 2022-05-13 09:30:00.123456
time 模块中的 Python strptime 函数
除了 datetime 库,time 模块也提供了 strptime 函数。虽然它看起来相同,但我们只使用此函数来处理时间。
time 库中的 strptime 函数接受时间的字符串表示作为第一个参数,格式说明符作为第二个参数。它使用这两个参数并将其转换为 struct_time。
time 模块中 strptime 函数的语法如下。
time.strptime(stringDt, format)
format 参数使用 datetime 模块中提到的相同指令。
strptime 时间模块示例
您也可以利用 time 库来使用此 strptime 函数。在这个时间实例中,我们在 time 库中使用它。
import time
dvalue = time.strptime('31/12/18', '%d/%m/%y')
print(dvalue)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=365, tm_isdst=-1)
如果您观察上面的输出,strptime 函数将输出返回为 struct_time 或时间的结构化表示。您可以使用此 struct_time 进一步访问每个组件并根据需要对其进行操作。
import time
dt = time.strptime('25/10/18', '%d/%m/%y')
print(dt)
print("day = ", dt.tm_mday)
print("Year = ", dt.tm_year)
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=298, tm_isdst=-1)
day = 25
Year = 2018
strptime 函数中处理 ValueErrors
如果输入时间字符串与格式指令不匹配,或者即使在解析 datetime 后仍有多余数据,Python strptime 函数也会抛出 ValueError。
在此示例中,我们以错误的顺序指定缩写或使用错误的格式来向您显示错误。
from datetime import datetime as rdm dt_string = '31/12/18' dval = rdm.strptime(dt_string, '%d %m %y') print(dval)
ValueError: time data '31/12/18' does not match format '%d %m %y'
pandas strptime
将 CSV 文件导入 DataFrame 时,大多数日期和时间列都是字符串格式。在执行数据分析和操作时,日期列起着至关重要的作用。我们必须将它们转换回 datetime 对象。在这种情况下,我们可以使用 pandas 库或模块提供的 strptime 函数。
由于我们想在这篇博客文章中探讨 strptime 函数,因此我们将其提及为处理日期和时间的唯一选项。然而,pandas 库有许多用于日期和时间的内置函数。例如,pd.to_datetime() 会自动将字符串日期转换为 Timestamp 对象。您可以使用 format 参数指定字符串格式。