Python中用户输入YYYYMMDD格式日期相减触发TypeError问题
解决日期相减的TypeError问题
嘿,我来帮你搞定这个TypeError问题!你的代码里有两个关键错误导致了这个问题,咱们一步步梳理清楚:
错误原因分析
datetime.date()用法完全错误:这个构造函数的要求是传入三个整数参数(年、月、日),比如datetime.date(2024, 1, 1),而不是直接丢给它日期字符串和格式字符串。你原来的datetime.date(startDate, "%Y-%m-%d")写法完全不符合它的调用规则,这就是触发TypeError的核心原因。- 格式字符串不匹配输入要求:你明确要求用户用
YYYYMMDD格式输入日期,但代码里却用了带横杠的%Y-%m-%d格式,就算解析方法对了,也会因为格式不匹配直接报错。
修正后的代码
import sys import datetime # 获取命令行传入的日期参数 start_date_str = sys.argv[1] end_date_str = sys.argv[2] # 解析YYYYMMDD格式的字符串为date对象 d1 = datetime.datetime.strptime(start_date_str, "%Y%m%d").date() d2 = datetime.datetime.strptime(end_date_str, "%Y%m%d").date() # 打印日期并计算差值 print(f"起始日期: {d1}") print(f"结束日期: {d2}") date_diff = d2 - d1 print(f"两个日期相差 {date_diff.days} 天")
代码说明
- 用
strptime解析字符串:datetime.datetime.strptime()是专门用来将字符串按指定格式解析为日期对象的方法,第一个参数是输入的日期字符串,第二个是对应的格式符(%Y%m%d正好匹配你要求的YYYYMMDD格式)。 - 转换为date对象:调用
.date()方法把解析得到的datetime对象转成纯date对象,这样后续的日期相减操作会返回timedelta对象,方便直接提取相差天数。 - 日期相减逻辑:两个date对象直接相减就能得到时间差,通过
.days属性可以轻松获取相差的天数。
运行示例
在命令行里这样执行你的脚本:
python your_script.py 20240101 20240115
内容的提问来源于stack exchange,提问作者cb101
相关产品推荐
相关产品推荐

