You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:18:16