You need to enable JavaScript to run this app. 如何实现从当前时间逐次减10分钟输出到2021年7月1日并修复报错
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从当前时间逐次减10分钟输出到2021年7月1日并修复报错

报错根因

你的代码触发停止条件时,函数before_10minute_time返回了整数0,下一轮循环会把这个0作为current_time传入函数,执行current_time - datetime.timedelta(minutes=10)时,就会出现「int类型和datetime.timedelta类型不能做减法」的类型错误。

另外你现有逻辑还有两处问题:

  • 用字符串匹配判断停止的方式效率低,且容易因为格式问题出现判断失误
  • 执行顺序逻辑有误:你先打印了减10分钟后的时间,再判断是否要停止,就算判断逻辑正确,也会多打印一条不符合要求的时间,你当前的代码就是判断逻辑未生效,才会让时间一直输出到2021年1月。

修正后的代码

import datetime

# 直接定义停止阈值的datetime对象,比较更准确高效
STOP_TIME = datetime.datetime(2021, 7, 1)

def before_10minute_time(current_time):
    current_time_minute10 = current_time - datetime.timedelta(minutes=10)
    # 先判断减完的时间是否早于停止阈值,早于就返回None标识需要终止
    if current_time_minute10 < STOP_TIME:
        return None
    # 符合要求再打印结果
    print("当前时间减去10分钟的结果:" + current_time_minute10.strftime('%Y%m%d%H%M%S'))
    return current_time_minute10

if __name__ == "__main__":
    current_time = datetime.datetime.today()
    while True:
        current_time = before_10minute_time(current_time)
        # 收到停止标识直接终止循环
        if current_time is None:
            break

逻辑说明

  • 直接用datetime对象做大小比较,不需要转字符串处理,不会出现格式匹配错误,判断效率更高
  • 先校验减10分钟后的时间是否符合要求,不符合就直接终止,不会打印不符合要求的时间
  • 全程不会出现类型不匹配的问题,所有传入函数的current_time都是datetime类型,收到None就直接终止循环,不会触发运算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:21:03