如何从日期范围中获取与指定日期最接近的日期?解决类型错误
问题解决:寻找与指定日期最接近的日期
你遇到的TypeError: unsupported operand type(s) for -: 'str' and 'str',核心原因是字符串类型无法直接进行减法运算——你把目标日期和待选日期都转成了字符串,导致无法计算日期差值。要解决这个问题,需要将所有日期统一转换成date对象后再做比较。
修改后的完整代码
import yfinance as yf from datetime import date, timedelta # 获取目标日期(90天后的日期,保留date对象类型) target_date = date.today() + timedelta(days=90) # 获取MSFT的期权到期日期列表 ticker = yf.Ticker("MSFT") date_strings = ticker.options # 定义寻找最近日期的函数 def nearest_date(date_strings, target_date): # 将每个字符串日期转成date对象,计算与目标日期的差值绝对值 return min(date_strings, key=lambda x: abs(date.fromisoformat(x) - target_date)) # 执行函数并输出结果 closest_date = nearest_date(date_strings, target_date) print(f"与目标日期{target_date}最接近的日期是:{closest_date}")
关键修改说明
- 简化导入并避免命名冲突:移除重复的
datetime导入,只保留需要的date和timedelta类,避免变量名冲突。 - 保留日期的原生类型:目标日期
target_date直接使用date对象,无需转成字符串,省去后续类型转换步骤。 - 字符串日期转原生日期对象:利用
date.fromisoformat(x)将yfinance返回的YYYY-MM-DD格式字符串日期,转换成可计算的date对象,这样就能和target_date计算时间差(返回timedelta类型),再通过绝对值比较大小找到最近的日期。
如果你的待选日期格式不是YYYY-MM-DD,可以替换为date.strptime(x, "%Y%m%d")(对应你之前用的%Y%m%d格式)来完成转换。
内容的提问来源于stack exchange,提问作者MANI
相关产品推荐
相关产品推荐

