Python使用strptime解析时间报ValueError:格式不匹配如何解决
报错原因
你使用的时间解析格式与实际传入的时间字符串结构不匹配,存在三处问题:
- 实际时间串末尾包含毫秒值
.11,格式串中未添加匹配毫秒/微秒的%f占位符 - 实际时间串不存在上午/下午标识(AM/PM),但格式串末尾加了
%p占位符 %H是24小时制的小时表示,本身不需要搭配用于标识上下午的%p使用,%p一般配合12小时制的%I占位符使用
解决方案
根据你的实际业务需求选择对应处理方式即可:
方案1:完全匹配现有时间串结构
如果需要保留毫秒值,直接修改格式串为:
utc = dt.strptime(timeEntry.get(), "%Y-%m-%d %H:%M:%S.%f")
方案2:截断毫秒后解析
如果不需要处理毫秒,可以先截取时间串到秒的部分再解析:
# 从右往左按第一个点分割,取前面的时间部分 time_raw = timeEntry.get().rsplit('.', 1)[0] utc = dt.strptime(time_raw, "%Y-%m-%d %H:%M:%S")
方案3:后续需要解析带AM/PM的时间
如果你的业务场景后续会传入12小时制带上下午标识的时间,需要先调整时间输出逻辑,确保输出的时间串符合年-月-日 时:分:秒 上下午标识的结构,同时将小时占位符替换为%I,示例:
# 对应时间串格式示例:2021-11-11 05:01:12 AM utc = dt.strptime(timeEntry.get(), "%Y-%m-%d %I:%M:%S %p")
内容的提问来源于stack exchange,提问作者William Mears
相关产品推荐
相关产品推荐

