在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
相关产品推荐
相关产品推荐

