Google 日历 API V3 TimeMax 和 TimeMin 功能

问题描述 投票:0回答:3

我正在尝试使用 Python 中的 Google Calendar API v3 来获取特定日期的所有事件。

到目前为止,我已宣布我的日期如下:

today_beginning = datetime.datetime.combine(date.today(), time())
today_end = today_beginning + datetime.timedelta(1, 0) - datetime.timedelta(0, 1)

today_beginning = today_beginning.isoformat() + 'Z'
today_end = today_end.isoformat() + 'Z'

然后我使用这些日期进行 API 调用

eventsResult = service.events().list(
    calendarId=cal_id.calendarId, timeMin=today_beginning, timeMax=today_end).execute()

问题是,我的 timeMin 日期之前的事件也被返回。

也许我对 API docs 理解不够?

仅供参考,如果今天是 2016 年 1 月 10 日,开始和结束时间将显示如下:

2016-01-10T00:00:00Z
2016-01-10T23:59:59Z
python google-calendar-api
3个回答
1
投票

注意您已设置 UTC 时区的日期

2016-01-10T00:00:00Z
2016-01-10T23:59:59Z

Z
代表 Zulu = UTC 时区

因此,如果您日历的时区不是 UTC - 您设置的时间段将不匹配

2016-01-10
(这将根据您日历的时区进行转换)


0
投票

不确定您的代码有什么问题,但这是我的修复方法,可以正确减去与 UTC 格式保持的时间。

注意: 我从您引用的 API 文档的同一页面开始使用他们的示例代码。 本示例中仅使用了 timeMin。 首先宣布日期:

tmin = datetime.datetime.utcnow() - datetime.timedelta(hours=24) time = tmin.isoformat() + 'Z'

然后使用相同的格式调用API

events_result = service.events().list( calendarId='primary', timeMin=time, maxResults=10, singleEvents=True, orderBy='startTime').execute()

这只是从 datetime.datetime.utcnow() 为您的日历找到的任何时间中减去 24 小时。 

我想对于 timeMax 你可以做完全相同的事情,但添加 datetime.timedelta() 代替。它可以添加到 utcnow() 的当前时间或添加到 tmin 的 timeMin 时间。


0
投票
文档

timeMin: Lower bound (exclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax

因此,如果在 timeMin 之后结束的事件将被包括在内

© www.soinside.com 2019 - 2024. All rights reserved.