调用Google Calendar API查询不同日历返回不同日期格式问题问询
问题原因
- Google Calendar API返回的日程时间字段本身存在两种结构,和账号配置无关:
- 非全天日程会返回
dateTime属性,格式为带时区偏移的ISO 8601字符串 - 全天日程会返回
date属性,格式为YYYY-MM-DD格式的纯日期字符串
- 非全天日程会返回
- 若两个日历返回的都是非全天日程但格式存在差异,是因为未在查询参数中显式指定时区,API会默认使用对应日历的默认时区返回时间值,即使你认为两个账号时区配置一致,也可能存在后台配置未同步的情况。
解决方案
- 显式在查询参数中添加
timeZone字段,强制所有返回的时间统一为你需要的时区,示例修改后的参数如下:
params = { 'calendarId': self._calendar.id, 'timeMin': from_datetime, 'timeMax': to_datetime, 'maxResults': MAX_APP_DOWNLOADS, 'singleEvents': True, 'orderBy': 'startTime', 'showDeleted': 'true', 'timeZone': 'Asia/Shanghai' # 替换为你实际需要的IANA标准时区ID }
- 解析日程时间时做兼容判断,适配两种返回格式,示例代码如下:
for event in events: start = event['start'] if 'dateTime' in start: # 处理非全天日程 event_time = start['dateTime'] else: # 处理全天日程 event_time = start['date'] # 后续业务逻辑
内容的提问来源于stack exchange,提问作者Matteo Pasini
相关产品推荐
相关产品推荐

