杰瑞科技汇

Python strptime 参数具体怎么用?

strptime 是 "string parse time" 的缩写,它的作用是将一个格式化的时间字符串解析成一个 datetime 对象

Python strptime 参数具体怎么用?-图1
(图片来源网络,侵删)

这个方法有两个核心参数:date_stringformat


方法签名

datetime.strptime(date_string, format)

参数详解

date_string (必需)

  • 类型: str
  • 描述: 这是你想要解析的时间字符串。
  • 重要: 这个字符串的格式必须与 format 参数中指定的格式完全匹配(包括分隔符、空格、大小写等),如果格式不匹配,ValueError 异常就会被抛出。

示例:

  • "2025-10-27 15:30:00"
  • "27/10/2025"
  • "October 27, 2025"
  • "20251027"

format (必需)

  • 类型: str
  • 描述: 这是一个格式字符串,用来告诉 Python 如何解释 date_string 中的各个部分,它由一系列的格式代码组成。
  • 重要: 这是 strptime 的核心,也是最容易出错的地方,你需要正确地使用格式代码来匹配你的时间字符串。

常用的格式代码:

代码 含义 示例 (输入字符串) 示例 (输出)
%Y 4位数的年份 2025 2025
%y 2位数的年份 (00-99) 23 2025 (假设当前世纪)
%m 2位数的月份 (01-12) 10 10
%B 月份的全称 October October
%b 月份的缩写 Oct Oct
%d 2位数的日期 (01-31) 27 27
%H 24小时制的小时 (00-23) 15 15
%I 12小时制的小时 (01-12) 03 3
%M 2位数的分钟 (00-59) 30 30
%S 2位数的秒 (00-59) 05 5
%f 微秒 (6位数字) 123456 123456
%A 星期几的全称 Friday Friday
%a 星期几的缩写 Fri Fri
%p AM/PM 标记 PM PM
%j 一年中的第几天 (001-366) 300 300
%U 一年中的第几周 (周日为每周第一天) 43 43
%W 一年中的第几周 (周一为每周第一天) 43 43
%c 本地日期和时间表示 Fri Oct 27 15:30:00 2025 Fri Oct 27 15:30:00 2025
%x 本化日期表示 10/27/23 10/27/23
%X 本地时间表示 15:30:00 15:30:00
一个字面的 '%' 字符 %

使用示例

让我们通过一些例子来理解这两个参数是如何协同工作的。

Python strptime 参数具体怎么用?-图2
(图片来源网络,侵删)

示例 1:标准格式 (ISO 8601)

from datetime import datetime
date_str = "2025-10-27 15:30:00"
# 格式说明:
# %Y: 4位年
# -: 连字符
# %m: 2位月
# %d: 2位日
# %H: 24小时
# %M: 分钟
# %S: 秒
dt_object = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"原始字符串: {date_str}")
print(f"解析后的 datetime 对象: {dt_object}")
print(f"对象的类型: {type(dt_object)}")
# 输出:
# 原始字符串: 2025-10-27 15:30:00
# 解析后的 datetime 对象: 2025-10-27 15:30:00
# 对象的类型: <class 'datetime.datetime'>

示例 2:不同格式的字符串

from datetime import datetime
# 字符串 "27/10/2025" 使用斜杠作为分隔符
str1 = "27/10/2025"
dt1 = datetime.strptime(str1, "%d/%m/%Y")
print(f"解析 '{str1}' 得到: {dt1}")
# 字符串 "10-27-23" 使用短年份和不同的分隔符
str2 = "10-27-23"
dt2 = datetime.strptime(str2, "%m-%d-%y")
print(f"解析 '{str2}' 得到: {dt2}")
# 字符串 "October 27, 2025" 使用月份全称
str3 = "October 27, 2025"
dt3 = datetime.strptime(str3, "%B %d, %Y")
print(f"解析 '{str3}' 得到: {dt3}")
# 字符串 "03:30 PM" 使用12小时制和AM/PM
str4 = "03:30 PM"
dt4 = datetime.strptime(str4, "%I:%M %p")
print(f"解析 '{str4}' 得到: {dt4}")
# 输出:
# 解析 '27/10/2025' 得到: 2025-10-27 00:00:00
# 解析 '10-27-23' 得到: 2025-10-27 00:00:00
# 解析 'October 27, 2025' 得到: 2025-10-27 00:00:00
# 解析 '03:30 PM' 得到: 1900-01-01 15:30:00 (注意:没有提供年月日,默认为1900-01-01)

示例 3:格式不匹配会引发错误

这是最常见的错误。formatdate_string 的结构不一致,就会抛出 ValueError

from datetime import datetime
date_str = "2025/10-27"  # 混合使用了斜杠和连字符
# 错误的 format,因为它假设所有分隔符都是连字符
try:
    datetime.strptime(date_str, "%Y-%m-%d")
except ValueError as e:
    print(f"捕获到错误: {e}")
# 正确的 format
correct_dt = datetime.strptime(date_str, "%Y/%m-%d")
print(f"正确解析 '{date_str}' 得到: {correct_dt}")
# 输出:
# 捕获到错误: time data '2025/10-27' does not match format '%Y-%m-%d'
# 正确解析 '2025/10-27' 得到: 2025-10-27 00:00:00

strptime vs strftime (一个重要的区别)

初学者经常混淆这两个方法,它们是互逆的操作:

方法 全称 作用 参数
strptime string parse time 字符串 -> datetime 对象 (date_string, format)
strftime string format time datetime 对象 -> 字符串 (format)

strftime 示例:

from datetime import datetime
# 创建一个 datetime 对象
now = datetime.now()
# 将 datetime 对象格式化为字符串
# 注意:strftime 只有一个 format 参数
str_now = now.strftime("%Y年%m月%d日 %H时%M分%S秒")
print(f"原始 datetime 对象: {now}")
print(f"格式化后的字符串: {str_now}")
# 输出 (示例):
# 原始 datetime 对象: 2025-10-27 15:45:30.123456
# 格式化后的字符串: 2025年10月27日 15时45分30秒

最佳实践和注意事项

  1. 格式匹配是关键:花时间确保你的 format 字符串与 date_string 的每一个字符(包括空格和标点)都对应上。

    Python strptime 参数具体怎么用?-图3
    (图片来源网络,侵删)
  2. 处理不同格式:如果需要处理多种可能的时间格式,可以使用 try-except 块来尝试多种 format

    from datetime import datetime
    date_str = "2025-10-27"
    formats_to_try = ["%Y-%m-%d", "%m/%d/%Y", "%d-%m-%Y"]
    for fmt in formats_to_try:
        try:
            dt = datetime.strptime(date_str, fmt)
            print(f"成功使用格式 '{fmt}' 解析: {dt}")
            break
        except ValueError:
            print(f"格式 '{fmt}' 不匹配。")
    else:
        print("所有尝试的格式都失败了。")
  3. 性能考虑strptime 的解析过程相对较慢,如果你需要在一个循环中解析大量相同格式的字符串,考虑先编译格式字符串,虽然 Python 标准库没有直接提供 compile 方法,但你可以缓存 datetime.strptime 的结果或者使用更快的第三方库(如 dateutilparser.parse)。

  4. 时区问题strptime 默认返回的是本地时区naive(无时区信息)datetime 对象,如果你的时间字符串包含时区信息(如 +08:00UTC),你需要使用更高级的工具(如 pytz 或 Python 3.9+ 的 zoneinfo 模块)来正确处理时区。

希望这份详细的解释能帮助你完全理解 Python strptime 的参数!

分享:
扫描分享到社交APP
上一篇
下一篇