Python 中如何把字符串转换成 datetime 对象?
Python 字符串转 datetime 用 datetime.strptime(字符串, 格式),格式符 %Y-%m-%d %H:%M:%S 等。本文介绍常用格式符、错误处理及 dateutil 自动解析。
标准做法:datetime.strptime(date_string, format)——按指定格式解析字符串。如 datetime.strptime("2024-01-15 10:30:00", "%Y-%m-%d %H:%M:%S")。
基本用法
from datetime import datetime
date_string = "2024-01-15 10:30:00"
date_format = "%Y-%m-%d %H:%M:%S"
dt = datetime.strptime(date_string, date_format)
print(dt) # 2024-01-15 10:30:00
格式串必须和字符串严格对应,否则抛 ValueError。
常用格式符
| 格式符 | 含义 | 示例 |
|---|---|---|
%Y |
4 位年 | 2024 |
%m |
2 位月 | 01 |
%d |
2 位日 | 15 |
%H |
24 小时制 | 10 |
%M |
分 | 30 |
%S |
秒 | 00 |
%f |
微秒 | 123456 |
%z |
时区偏移 | +0800 |
ISO 8601 格式(更省事)
# Python 3.7+
dt = datetime.fromisoformat("2024-01-15T10:30:00+08:00")
格式不确定:dateutil
from dateutil import parser
dt = parser.parse("Jan 15, 2024 10:30 AM") # 自动识别各种格式
反向操作:datetime 转字符串
dt.strftime("%Y-%m-%d %H:%M:%S") # 格式化输出
dt.isoformat() # ISO 8601 格式
常见问题(FAQ)
Q:解析失败报 ValueError?
A:格式串和字符串不匹配。逐个核对格式符;不确定格式用 dateutil。
Q:带毫秒的字符串怎么解析?
A:"%Y-%m-%d %H:%M:%S.%f",%f 匹配微秒(毫秒三位也能正确解析为微秒)。
Q:解析日志里的时间戳用什么?
A:日志采集场景不需要在应用里解析——观测云 DataKit/Pipeline 会自动提取日志时间字段作为日志时间。