日期字符串解析遇非零补全格式报错,求解决方案
日期字符串解析问题解决建议
问题核心
你的输入日期'2022-01-07T02:05:1'秒数是单个数字,而你之前的代码没覆盖这种格式:
- 第一段代码只适配了带Z后缀的
%Y-%m-%dT%H:%M:%SZ和空格分隔的%Y-%m-%d %H:%M:%S(要求秒为两位) - 第二段代码最后用的
%Y-%m-%d %H:%M:%-S是错误格式,Python的strptime不支持这种写法
可行解决办法
办法1:原生Python扩展格式匹配链
修改parse_date函数,补充适配单秒数的逻辑,同时修正错误格式:
import datetime def parse_date(date_string): # 尝试带Z后缀的标准格式 try: return datetime.datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ") except ValueError: pass # 尝试T分隔、两位秒的格式 try: return datetime.datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%S") except ValueError: pass # 处理T分隔、单秒数的情况:补零后再解析 try: parts = date_string.split(':') if len(parts[-1]) == 1: fixed_date = ':'.join(parts[:-1] + [parts[-1].zfill(2)]) return datetime.datetime.strptime(fixed_date, "%Y-%m-%dT%H:%M:%S") except ValueError: pass # 尝试空格分隔的格式 try: return datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S") except ValueError: # 可根据需求调整默认处理,比如返回None或抛出明确异常 raise ValueError(f"无法解析日期字符串: {date_string}")
办法2:用第三方库自动适配(推荐)
如果允许安装第三方库,python-dateutil的parser能自动识别绝大多数日期格式,不用手动维护格式列表:
from dateutil import parser def parse_date(date_string): return parser.parse(date_string)
安装命令:
pip install python-dateutil
注意事项
- 别用
%Y-%m-%d %H:%M:%-S这种无效格式,Python strptime不支持 - 你的目标字符串是
T分隔日期和时间,不是空格,所以空格分隔的格式不会匹配它 - 单秒数的情况要么手动补零,要么交给第三方库处理
内容的提问来源于stack exchange,提问作者ssiftekhar
相关产品推荐
相关产品推荐

