精通 Python strptime():准确解析日期字符串
Python strptime():将字符串转换为 datetime 对象
本指南展示如何使用 Python 的 datetime.strptime() 方法从字符串创建 datetime 对象,包含实用示例和完整的格式代码参考。
视频:Python 中的日期和时间处理
观看官方 Python 教程以加深对 datetime 处理的理解。
strptime() 方法根据指定格式从字符串创建 datetime 对象。
注意: 并非所有字符串都能解析;输入必须与格式代码完全匹配。
示例 1:转换简单的日期字符串
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() 如何工作
strptime() 类方法接受两个参数:
- 要解析的字符串。
- 描述字符串布局的格式代码。
基于这些输入,该方法返回一个表示相同时间点的 datetime 对象。
在上面的示例中,格式代码 %d %B, %Y 表示:
%d– 月份中的第几天,零填充 (01-31)。%B– 完整月份名称 (January-December)。%Y– 四位数年份。
示例 2:解析歧义日期
from datetime import datetime
dt_string = "12/11/2018 09:15:32" # 假设为 日/月/年 格式
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# 假设为 月/日/年 格式
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
格式代码完整列表
下表汇总了可用于 strptime() 的所有指令。完整文档请参考 Python 官方 datetime 模块指南。
| 指令 | 含义 | 示例 |
|---|---|---|
%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, ..., 12 |
%p | 本地化的 AM 或 PM | 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 | 周数 (周日为第一天) | 00, 01, ..., 53 |
%W | 周数 (周一为第一天) | 00, 01, ..., 53 |
%c | 本地化的日期和时间 | Mon Sep 30 07:06:05 2013 |
%x | 本地化的日期 | 09/30/13 |
%X | 本地化的时间 | 07:06:05 |
%% | 字面上的百分号 | % |
常见错误: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'
推荐阅读: Python strftime()
Python
- Python关键字与标识符:掌握保留字与命名规范
- 精通Python数据类型:实战指南
- 精通Python运算符:全面指南
- 精通Python Pass语句:实战指南
- 精通Python函数参数:位置、关键字与默认参数
- 精通 Python 字典:创建、操作与进阶技巧
- 精通 Python 迭代器:工作原理与自定义构建
- Python 闭包详解:嵌套函数如何捕获变量
- Python 正则表达式 (re 模块) 实战指南
- 精通 Python datetime:日期、时间与时区实战指南
- 精通 Python time 模块:函数、结构体与实战示例
- 精通 Python time.sleep():最佳实践、多线程与实战案例