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

如何修复Python语音助手调用Google Calendar API添加日历事件的时间错误

修复Python语音助手日历事件解析问题

原代码问题梳理

  • 日期解析逻辑错误:解析日期时误用了parts[i](即"tarihinde"指令词),实际目标日期在该词的下一个位置parts[i+1]
  • time变量未初始化:若语音命令未提及"saat",后续判断time is None会触发未定义错误
  • 未合并时间到日期对象:即便解析到时间,也未将其同步到date变量中,导致始终用当前时间生成事件
  • 事件标题(summary)生成混乱:将日期、时间相关指令词混入标题,未过滤无效内容
  • 缺少时间格式处理:仅提取时间字符串,未转换为datetime可识别的时间格式

修复方案及完整代码

以下是修复后的代码,关键修复点已添加注释:

from datetime import datetime, timedelta

def parse_command(command):
    # 初始化日期为当前日期,时间默认清零(后续可通过命令覆盖)
    date = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
    summary = ""
    time = None  # 初始化time变量,避免未定义错误

    parts = command.split(" ")
    for i in range(len(parts)):
        if parts[i] == "saat" and i+1 < len(parts):
            try:
                # 解析24小时制时间(如"2"对应02:00)
                hour = int(parts[i+1])
                # 将解析到的小时同步到date对象
                date = date.replace(hour=hour)
                time = parts[i+1]
            except ValueError:
                print("Geçersiz saat formatı. Lütfen sayı olarak girin.")
        elif parts[i] == "tarihinde" and i+1 < len(parts):
            try:
                # 修正:读取"tarihinde"后的日期字符串
                date_str = parts[i+1]
                parsed_date = datetime.strptime(date_str, "%d/%m/%Y")
                # 保留已设置的时间,仅替换日期部分
                date = date.replace(year=parsed_date.year, month=parsed_date.month, day=parsed_date.day)
            except ValueError:
                print("Geçersiz tarih formatı. Lütfen gün/ay/yıl formatında girin.")
        # 过滤指令关键词,仅保留事件核心标题内容
        elif parts[i] not in ["toplantı", "saat", "tarihinde"]:
            summary += parts[i] + " "

    # 校验时间是否有效
    if time is None:
        return "Saat belirtilmedi", None, None

    # 生成日历要求的时间格式,结束时间默认延后1小时
    start_time = date.strftime("%Y-%m-%dT%H:%M:%S") + "+00:00"
    end_time = (date + timedelta(hours=1)).strftime("%Y-%m-%dT%H:%M:%S") + "+00:00"

    return summary.strip(), start_time, end_time

关键修复说明

  1. 日期解析修正:将日期读取目标改为parts[i+1],同时用replace方法保留已设置的时间部分
  2. 时间处理优化:初始化time变量,解析"saat"后的数字并同步到date的小时字段
  3. 标题过滤逻辑:排除指令类关键词,确保标题仅包含会议相关内容
  4. 默认值调整:初始日期设为当前日期但时间清零,避免未指定时间时误用当前小时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:47:17