Python实现Fortnite API最新日期检测及间隔天数计算问题求助
问题分析与修复方案
核心问题点
- 错误直接将
shopHistory数组传给isoparse:shopHistory是包含多个ISO日期字符串的数组,无法直接被单个日期解析函数处理 - 冗余的日期转换逻辑:从ISO字符串转timestamp再转datetime再转字符串再解析,完全是无效的绕路操作
- 错误使用
max(r.days):r.days是单个整数数值,max()函数用于数组取值,此处逻辑完全错误
修复后的代码
import requests from datetime import datetime from dateutil.parser import isoparse from dateutil.relativedelta import relativedelta # 请求API并处理异常 response = requests.get("https://fortnite-api.com/v2/cosmetics/br/search/all?language=es&name=palito%20de%20pescado%20de%20gominola&searchLanguage=es") response.raise_for_status() # 捕获请求失败的情况 data = response.json() # 提取并解析所有上架日期 shop_history_dates = [isoparse(date_str) for date_str in data['data'][0]['shopHistory']] # 获取最新的上架日期 latest_shop_date = max(shop_history_dates) # 计算与当前日期的间隔(保持时区一致避免警告) current_date = datetime.now(latest_shop_date.tzinfo) # 精确间隔天数 exact_days = (current_date - latest_shop_date).days # 按年/月/日拆分的间隔 delta = relativedelta(current_date, latest_shop_date) print(f"最新上架日期:{latest_shop_date}") print(f"到当前的精确间隔天数:{exact_days}") print(f"间隔拆分:{delta.years}年 {delta.months}月 {delta.days}天")
关键修复说明
- 先遍历
shopHistory数组,将每个日期字符串解析为可比较的datetime对象 - 直接用
max()在datetime数组中获取最新日期(datetime原生支持大小比较) - 保持时区一致:确保当前日期与上架日期使用同一时区,避免时区不匹配的警告
- 精确天数直接通过两个datetime对象的差值获取,比relativedelta更简洁可靠
- 添加请求异常处理,提升代码稳定性
内容的提问来源于stack exchange,提问作者abel5487
相关产品推荐
相关产品推荐

