Python日期字符串格式转换报错求助:将16-Aug-2019转为2019-08-01
解决日期格式转换及ValueError问题
咱们直接拆解你遇到的两个核心问题,一步步来解决:
1. 日期格式字符串完全不匹配
你要转换的原始日期是16-Aug-2019这种格式,对应的strptime格式代码得用%d-%b-%Y:
%d:两位数字的日期(比如示例里的16)%b:月份的英文缩写(比如Aug)%Y:四位数字的年份(比如2019)
而你现在写的%y-%m-%d是对应「两位年份-数字月份-日期」的格式(比如19-08-16),和原始格式完全对不上,这是第一个出错的点。
2. 混入非日期数据导致报错
报错里提到的'As-of'说明你的formatd_date变量里有非目标日期格式的内容(比如表头、备注文字),直接强行转换自然会抛出ValueError,得先做异常处理或者数据过滤。
完整修正代码示例
from datetime import datetime def convert_date(raw_date): # 处理字符串前后可能的空格,避免空格导致解析失败 cleaned_date = raw_date.strip() try: # 按原始日期格式解析 parsed_date = datetime.strptime(cleaned_date, '%d-%b-%Y') # 转成你需要的YYYY-MM-DD格式 return parsed_date.strftime('%Y-%m-%d') except ValueError: # 遇到非日期内容时,要么返回原内容,要么按需求自定义处理(比如返回None) print(f"跳过无效日期内容: {cleaned_date}") return cleaned_date # 测试示例 test_data = ['16-Aug-2019', 'As-of', '05-Mar-2021'] for item in test_data: print(convert_date(item))
代码说明
- 用
try-except捕获异常,遇到'As-of'这类非日期内容时不会崩溃,还能提示跳过的内容 - 先按原始格式解析日期,再用
strftime转成你需要的格式 - 增加
strip()处理,避免原始字符串前后的空格导致解析失败
内容的提问来源于stack exchange,提问作者Haz
相关产品推荐
相关产品推荐

