我正在尝试使用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
答案 0 :(得分:0)
来自docs:
timeMin: Lower bound (inclusive) 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, e.g., 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but will be ignored. (string)
所以如果在timeMin
之后结束,那么在timeMin之前开始的事件将被包括在内答案 1 :(得分:0)
请注意您已设置UTC时区的日期
2016-01-10T00:00:00Z
2016-01-10T23:59:59Z
Z
代表Zulu = UTC时区
因此,如果您的日历的时区不是UTC - 您设置的时间段将与2016-01-10
不匹配(根据您的日历的时区,它将是一个班次)
答案 2 :(得分:0)
不知道您的代码有什么问题,但这是我的解决方法,可以正确减去与UTC格式保持一致的时间。
注意: 我从same page you reference as the API docs的示例代码开始。 在此示例中仅使用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()时间中,也可以将其添加到timeMin时间中的tmin。