如何实现判断指定日期是否在当前日期的一周范围内?
修正判断指定日期是否在当前一周范围内的Python代码
嘿,我看了你这段代码,逻辑确实跑偏了,咱们一步步来梳理问题并修正它~
原代码的核心问题
- 你错误地用当前日期减去了指定日期的日部分数值(比如
date='2018-04-01'就减了1天),这完全不是判断“一周范围”的逻辑 - 后续把日期对象转成字符串再截取字符判断等于'07'的操作,也完全不符合日期差的判断逻辑
修正后的代码逻辑
要判断指定日期是否在当前日期的一周范围内,我们需要:
- 获取仅保留日期部分的当前日期(去掉时分秒,避免干扰)
- 将指定的日期字符串转换为datetime日期对象
- 计算两个日期之间的天数差,取绝对值
- 判断天数差是否小于等于7,若是则处于一周范围内,再执行邮件发送操作
完整修正代码
from datetime import datetime, timedelta import yagmail # 获取当前日期(仅保留年月日,去掉时分秒) curr_date = datetime.now().date() # 指定需要判断的日期 target_date_str = '2018-04-01' # 将字符串转换为date对象 target_date = datetime.strptime(target_date_str, '%Y-%m-%d').date() # 计算两个日期的天数差(取绝对值,避免顺序影响) days_diff = abs((curr_date - target_date).days) # 判断是否在一周范围内(<=7天) if days_diff <= 7: print("指定日期处于当前日期的一周范围内") # 执行邮件发送逻辑 try: yag = yagmail.SMTP("#########@gmail.com", "######") content = ['这里填写你的邮件内容'] yag.send(to="收件人邮箱@xxx.com", subject="日期提醒", contents=content) print("邮件发送成功") except Exception as e: print(f"邮件发送失败: {e}") else: print("指定日期不在当前日期的一周范围内")
代码说明
- 使用
date()方法获取纯日期对象,避免时分秒导致的计算误差 - 通过
abs((curr_date - target_date).days)获取两个日期的绝对天数差,不管指定日期在当前日期之前还是之后都能正确判断 - 加入了异常捕获,避免邮件发送过程中出错导致程序崩溃
内容的提问来源于stack exchange,提问作者tygzy
相关产品推荐
相关产品推荐

