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

在Python中基于Google Calendar API如何查询过去1个月的全部事件?

如何用Google Calendar API查询过去1个月的事件?

嘿,刚好我前段时间也折腾过这个需求,给你一步步讲清楚怎么修改快速入门的代码来实现查询过去1个月的所有事件!

核心要点:理解timeMin和timeMax的格式

Google Calendar API要求时间参数必须是RFC3339格式的UTC时间字符串,结尾要加Z表示UTC时区,不能直接用本地时间或者普通的datetime字符串,这点很容易踩坑!

步骤1:计算过去1个月的时间范围

我们需要两个时间点:

  • timeMax:当前UTC时间(作为查询的结束点,也就是“现在”)
  • timeMin:1个月前的UTC时间(作为查询的起始点)

用Python自带的datetime模块就能搞定,如果要近似1个月可以用4周;如果要精准到“上个月的今天”,可以用python-dateutil库(需要额外安装)。

方法1:用timedelta近似1个月(无需额外依赖)

from datetime import datetime, timedelta

# 当前UTC时间,转成RFC3339格式
time_max = datetime.utcnow().isoformat() + 'Z'
# 减去4周(近似1个月)得到起始时间
time_min = (datetime.utcnow() - timedelta(weeks=4)).isoformat() + 'Z'

方法2:用relativedelta精准计算1个月(推荐)

先安装依赖:

pip install python-dateutil

然后代码:

from datetime import datetime
from dateutil.relativedelta import relativedelta

time_max = datetime.utcnow().isoformat() + 'Z'
# 精准减去1个月
time_min = (datetime.utcnow() - relativedelta(months=1)).isoformat() + 'Z'

步骤2:修改API查询代码

把快速入门示例里的未来事件查询代码替换成下面的逻辑,重点是指定timeMin和timeMax,同时设置singleEvents=True来展开重复事件,orderBy='startTime'让结果按时间排序:

# 先确保你已经完成了OAuth认证,拿到了creds(和快速入门的代码一致)
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials

service = build('calendar', 'v3', credentials=creds)

# 查询过去1个月的所有事件
events_result = service.events().list(
    calendarId='primary',  # 如果你要查其他日历,替换成对应的calendarId
    timeMin=time_min,
    timeMax=time_max,
    singleEvents=True,  # 展开重复事件为单个实例
    orderBy='startTime'  # 按事件开始时间排序
).execute()
events = events_result.get('items', [])

# 处理查询结果
if not events:
    print("过去1个月没有找到任何事件哦~")
for event in events:
    # 处理全天事件和定时事件的不同格式
    start_time = event['start'].get('dateTime', event['start'].get('date'))
    print(f"{start_time} | {event['summary']}")

额外注意事项

  • 权限:确保你的OAuth令牌申请了https://www.googleapis.com/auth/calendar.readonly权限(如果只是查询只读就够了,要是需要修改事件就用calendar权限)
  • timeMax是排他性的:也就是说API不会返回刚好等于timeMax的事件,所以设为当前UTC时间完全没问题,不会漏掉刚创建的事件
  • 日历ID:如果要查询非主日历,需要把calendarId换成对应日历的ID,可以在Google Calendar网页版的设置里找到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:55:30