Python字符串转datetime报unconverted data remains错误如何解决
报错诱因
触发该报错及原有代码无法运行的核心原因有3点:
- 格式符与输入字符串不匹配:调用
time.strptime时传入的格式串为"%Y-%m-%dT%H:%M:%S",存在两处不匹配:一是原字符串日期与时间的分隔符为空格,而非格式串里写的字符T;二是%S格式符仅匹配2位长度的秒数值,但原字符串最后一段为10位数字1656349200,仅前2位16能被%S匹配,剩余的56349200无对应格式符解析,直接抛出ValueError: unconverted data remains: 56349200。 - 解析逻辑与输入结构不匹配:输入字符串
2022-06-27 17:00:1656349200最后一段的10位数字本身就是Unix秒级时间戳(换算后恰好对应2022-06-27 17:00:00),并非“时分秒+零散微秒片段”的结构,原有代码先转时间结构体、再转时间戳、再替换微秒的逻辑完全不适配该输入。 - 代码存在未定义变量:原有代码中使用的
frag变量未提前赋值,即便格式匹配通过,运行到微秒替换行也会触发NameError。
修正代码
针对当前输入的字符串结构,不需要走字符串逐段解析的逻辑,直接提取末尾的时间戳转datetime即可,代码简洁且无格式匹配误差:
import datetime t = '2022-06-27 17:00:1656349200' # 从最后一个冒号位置分割,提取10位时间戳转整型 timestamp = int(t.rsplit(":", 1)[-1]) dt = datetime.datetime.fromtimestamp(timestamp) print(dt) # 输出结果:2022-06-27 17:00:00
如果后续需要解析标准的「日期 时间.微秒」格式字符串(例如2022-06-27 17:00:00.563492),直接用匹配的格式符一次性解析即可,不需要额外做时间戳转换、微秒替换操作:
import datetime t = '2022-06-27 17:00:00.563492' # 注意日期时间分隔符为空格,微秒对应%f格式符 dt = datetime.datetime.strptime(t, "%Y-%m-%d %H:%M:%S.%f") print(dt) # 输出结果:2022-06-27 17:00:00.563492
内容的提问来源于stack exchange,提问作者genz_on_code
相关产品推荐
相关产品推荐

