Python strptime()报错:参数1需为str而非datetime.date的问题求助
解决日期转换的TypeError问题
嘿,我来帮你捋清楚这个问题!你遇到的TypeError: strptime() argument 1 must be str, not datetime.date报错,本质是搞反了日期和字符串的转换方向,而且你的from_date其实已经是datetime.date类型了,根本不需要再用strptime转换。
错误原因拆解
你提到from_date来自ini文件的2018-01-01,但执行print(type(from_date))后,应该能看到它的类型是datetime.date——这说明在你调用strptime之前,已经有代码把ini里的字符串自动解析成日期对象了。而datetime.strptime()的作用是把字符串转换成日期对象,你给它传一个已经是日期类型的变量,自然会报错。
解决方案
根据你的需求分两种情况处理:
如果你需要的是
datetime.date类型的对象:
直接用现有的from_date就行,不需要任何转换代码。如果你需要把日期对象转换成特定格式的字符串:
用strftime()方法(注意是strftime,不是strptime),示例代码:# 假设from_date已经是datetime.date类型 from_date_str = from_date.strftime('%Y-%m-%d') print(from_date_str) # 输出结果:'2018-01-01'如果你确实需要从ini的字符串转日期:
检查代码中是否有重复转换的逻辑,确保只在拿到原始字符串时调用一次strptime:import configparser import datetime # 读取ini文件的原始字符串 config = configparser.ConfigParser() config.read('你的配置文件.ini') from_date_str = config.get('配置节名称', 'from_date') # 只在这里转一次日期对象 from_date = datetime.datetime.strptime(from_date_str, '%Y-%m-%d').date()
一句话总结
strptime是字符串→日期,strftime是日期→字符串,先确认你的变量类型,再选对应的转换方法就不会错啦!
内容的提问来源于stack exchange,提问作者Zedaiq
相关产品推荐
相关产品推荐

