ZetCode

Python time.strptime 函数

上次修改时间:2025 年 4 月 11 日

本综合指南探讨了 Python 的 time.strptime 函数,该函数根据格式规范解析表示时间的字符串。

基本定义

time.strptime 函数根据格式规范将表示时间的字符串转换为时间元组 (struct_time)。

主要特点:返回 time.struct_time 对象,对无效格式引发 ValueError,并使用类似于 strftime 的格式代码。

基本的字符串到时间转换

此示例演示了 strptime 用于解析日期字符串的最简单用法。 格式字符串必须与输入字符串完全匹配。

basic_strptime.py
import time

date_string = "2025-04-11"
format_string = "%Y-%m-%d"

parsed_time = time.strptime(date_string, format_string)
print(parsed_time)
print(f"Year: {parsed_time.tm_year}")
print(f"Month: {parsed_time.tm_mon}")
print(f"Day: {parsed_time.tm_mday}")

格式字符串 "%Y-%m-%d" 匹配输入的 "YYYY-MM-DD" 格式。 该函数返回一个包含已解析组件的 struct_time 对象。

每个组件都可以通过诸如 tm_year, tm_mon 等属性进行访问。 struct_time 可以转换为其他格式或用于计算。

解析包含小时和分钟的时间

此示例显示了如何使用 strptime 解析包含日期和时间组件的字符串。

time_parsing.py
import time

datetime_string = "2025-04-11 14:30:00"
format_string = "%Y-%m-%d %H:%M:%S"

parsed_time = time.strptime(datetime_string, format_string)
print(parsed_time)
print(f"Hour: {parsed_time.tm_hour}")
print(f"Minute: {parsed_time.tm_min}")
print(f"Second: {parsed_time.tm_sec}")

格式字符串包含时间组件,其中 %H 表示 24 小时格式的小时,%M 表示分钟,%S 表示秒。

请注意,strptime 严格匹配格式 - 额外的空格或不同的分隔符会导致 ValueError。

处理不同的日期格式

此示例演示了通过相应地调整格式字符串来解析不同格式的日期。

different_formats.py
import time

# US format: Month/Day/Year
us_date = "04/11/2025"
us_format = "%m/%d/%Y"

# European format: Day.Month.Year
eu_date = "11.04.2025"
eu_format = "%d.%m.%Y"

# Parsing both formats
us_parsed = time.strptime(us_date, us_format)
eu_parsed = time.strptime(eu_date, eu_format)

print("US format parsed:", us_parsed)
print("EU format parsed:", eu_parsed)

通过更改格式字符串以匹配输入结构,可以从不同的区域格式解析同一日期。

这种灵活性使得 strptime 可用于处理来自具有不同格式约定的各种来源的日期。

解析星期几和月份名称

此示例显示了如何使用适当的格式代码解析包含星期几或月份名称的日期。

named_components.py
import time

date_with_names = "Friday, April 11, 2025"
format_string = "%A, %B %d, %Y"

parsed_time = time.strptime(date_with_names, format_string)
print(parsed_time)
print(f"Weekday (0-6): {parsed_time.tm_wday}")
print(f"Month (1-12): {parsed_time.tm_mon}")

%A 匹配完整的星期几名称(Monday、Tuesday 等),而 %B 匹配完整的月份名称(January、February 等)。

解析后的 struct_time 在 tm_wday (0=Monday) 和 tm_mon (1=January) 属性中包含这些组件的数值。

处理 12 小时时间格式

此示例演示了如何使用 %I 和 %p 格式代码解析具有 AM/PM 指示的 12 小时格式的时间。

ampm_time.py
import time

time_string = "02:30 PM"
format_string = "%I:%M %p"

parsed_time = time.strptime(time_string, format_string)
print(parsed_time)
print(f"24-hour hour: {parsed_time.tm_hour}")  # Will be 14

%I 表示 12 小时格式的小时(01-12),而 %p 匹配 AM/PM。 解析后的时间在 struct_time 中转换为 24 小时格式。

请注意,使用 %p 时,输入必须包含 AM/PM 指示,否则将引发 ValueError。

解析时区信息

此示例显示了如何使用 %Z 格式代码解析包含时区信息的字符串。

timezone_parsing.py
import time

datetime_string = "2025-04-11 14:30:00 EST"
format_string = "%Y-%m-%d %H:%M:%S %Z"

parsed_time = time.strptime(datetime_string, format_string)
print(parsed_time)
print(f"Timezone: {parsed_time.tm_zone}")

%Z 匹配时区名称,如 EST、UTC、GMT 等。 解析后的时间包含在 struct_time 的 tm_zone 属性中。

请注意,strptime 不执行时区转换 - 它仅将时区名称存储在 struct_time 中。

使用 strptime 进行错误处理

此示例演示了在解析可能无效的日期字符串时,如何进行适当的错误处理。

error_handling.py
import time

def safe_strptime(date_string, format_string):
    try:
        return time.strptime(date_string, format_string)
    except ValueError as e:
        print(f"Error parsing '{date_string}': {e}")
        return None

# Valid date
result = safe_strptime("2025-04-11", "%Y-%m-%d")
print("Valid date result:", result)

# Invalid date
result = safe_strptime("2025-02-30", "%Y-%m-%d")  # Feb 30 doesn't exist
print("Invalid date result:", result)

# Wrong format
result = safe_strptime("11/04/2025", "%Y-%m-%d")
print("Wrong format result:", result)

该函数捕获在输入字符串与格式不匹配或包含无效日期组件时发生的 ValueError 异常。

这对于强大的日期解析非常重要,尤其是在处理用户输入或来自外部来源的数据时。

最佳实践

资料来源

作者

我叫 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 至今,我已撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程