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

如何使用Python实现指定时间点触发的多提醒设置功能

Python指定时间点提醒功能实现方案

核心实现思路

需要解决两个核心问题:第一是从自然语言输入中解析出目标时间和提醒内容,第二是实现多任务的定时调度,到点触发提醒。

依赖安装

用到两个第三方库,直接用pip安装即可:

  • 时间解析用dateparser:支持自动识别中文的「下午2点」「明天3点」这类自然语言时间
  • 多定时任务调度用schedule:比手动写循环判断时间更稳定,支持多任务并行
pip install dateparser schedule

完整实现代码

import dateparser
import schedule
import time
from datetime import datetime

# 存储所有提醒任务的唯一标识,避免重复添加
reminder_ids = set()

def trigger_reminder(content):
    """触发提醒的回调函数"""
    print(f"\n⏰ 提醒时间到:{content}")
    # 可在此处替换为弹窗、声音提醒等其他触发方式

def add_reminder(input_str):
    """从自然语言输入解析并添加提醒"""
    # 解析输入中的时间
    parsed_time = dateparser.parse(input_str, languages=['zh'])
    if not parsed_time:
        print("❌ 无法识别输入的时间,请调整表述后重试")
        return
    
    # 校验时间是否为未来时间
    now = datetime.now()
    if parsed_time < now:
        print("❌ 输入的时间已经过去,请设置未来的时间")
        return
    
    # 提取提醒内容,可根据自己的需求优化拆分规则
    time_mark = parsed_time.strftime("%p%H点").replace("AM","上午").replace("PM","下午")
    content = input_str.split(time_mark)[-1].strip() if time_mark in input_str else input_str
    if not content:
        content = "无备注提醒"
    
    # 生成任务唯一id,避免重复添加
    task_id = f"{parsed_time.timestamp()}_{content}"
    if task_id in reminder_ids:
        print(f"⚠️ 已存在相同的提醒:{parsed_time.strftime('%Y-%m-%d %H:%M:%S')} {content}")
        return
    
    # 定义一次性任务,执行后自动销毁
    def one_time_job():
        trigger_reminder(content)
        reminder_ids.remove(task_id)
        return schedule.CancelJob
    
    # 计算延迟时间加入调度
    delay = (parsed_time - now).total_seconds()
    schedule.every(delay).seconds.do(one_time_job)
    reminder_ids.add(task_id)
    print(f"✅ 提醒设置成功:{parsed_time.strftime('%Y-%m-%d %H:%M:%S')} {content}")

if __name__ == "__main__":
    print("提醒设置工具,输入示例:下午2点记得倒垃圾,输入exit退出")
    # 单独线程处理用户输入,避免阻塞调度循环
    import threading
    def input_loop():
        while True:
            user_input = input("\n请输入提醒内容:")
            if user_input.lower() == "exit":
                print("程序退出")
                exit(0)
            add_reminder(user_input)
    
    threading.Thread(target=input_loop, daemon=True).start()
    
    # 主循环运行调度器
    while True:
        schedule.run_pending()
        time.sleep(1)

功能说明

  • 支持中文自然语言时间识别:可识别「下午2点」「明天上午9点半」「下周五18点」等常用时间表述
  • 支持多提醒同时设置:schedule库自动管理所有定时任务,无需手动维护多个时间判断
  • 一次性提醒:触发后自动删除任务,不会重复执行
  • 可根据需求修改trigger_reminder函数,实现系统弹窗、播放提示音、发送通知等更多提醒方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:07