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

Python如何比较两个日期 判断爬取的日期是否在今日起1年范围内

实现方案

核心逻辑是先把爬取到的字符串格式日期解析为Python原生日期对象,再做日期运算和比较,不要直接拿字符串和日期值对比,否则要么类型报错,要么因为字符串字典序规则返回错误结果。

依赖说明

需要用到两类库:

  • datetime:Python标准库,用于生成日期对象、获取当前日期
  • python-dateutil:第三方库,用于准确计算N年后的日期,避免直接加365天遇到闰年、跨月导致的日期偏差,安装命令:pip install python-dateutil

完整实现代码

from datetime import datetime, date
from dateutil.relativedelta import relativedelta
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

def is_contract_in_valid_range(driver):
    # 爬取页面上的合同到期日期文本
    contract_end_date_str = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '//*[@id="lbl_CONTRACT_EXPIRES"]'))
    ).text.strip()

    # 把MM/DD/YYYY格式的字符串解析为纯日期对象,适配示例中"09/25/2022"这类格式
    contract_end_date = datetime.strptime(contract_end_date_str, "%m/%d/%Y").date()

    # 计算今日起1年后的日期:取当前自然日(不带时分秒),按日历规则加1年,规避闰年误差
    today = date.today()
    one_year_later = today + relativedelta(years=1)

    # 原生日期对象支持直接大小比较,早于/等于1年后的日期则返回True
    return contract_end_date <= one_year_later

常见踩坑点说明

  • 不要直接比较日期字符串和日期对象:二者类型不兼容会直接抛出类型错误
  • 不要直接对日期字符串做大小比较:字符串按ASCII字符顺序比对,比如"10/01/2023"会被判定为小于"09/25/2024",结果完全不符合预期
  • 不要用timedelta(days=365)计算1年后的时间:遇到闰年、特殊日期时会出现1天左右的偏差,用relativedelta(years=1)是按日历规则计算年偏移,结果符合通用业务逻辑
  • 如果页面爬取到的日期前后有空格、换行,记得加.strip()清理后再做格式解析,避免解析报错

内容的提问来源于stack exchange,提问作者coinmaster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:03:29