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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:53:31