我正在使用Google日历api将活动添加到其他网站的Google日历中。当我尝试创建一整天的事件时,我遇到了一个问题。我可以轻松地将datetime.timedelta(days = 1)添加到从上午12点开始的日期时间对象,但是会创建一个事件,该事件从00:00开始,到23:59结束,而不是全天事件(存在差异)
中没有google apis事件创建文档为here。在Python中,基本上你提交一个简单的json对象来创建一个定义了事件参数的事件。
以下是我的代码尝试全天活动:
creds = customer.get_calendar_creds()
http = creds.authorize(httplib2.Http())
service = discovery.build('calendar', 'v3', http=http)
calendar = service.calendars().get(calendarId=customer.calendar_id or 'primary').execute()
tz_string = calendar['timeZone']
gc_tz = pytz.timezone(tz_string)
start_time = gc_tz.localize(parser.parse(calendar_event_form.cleaned_data['date']))
end_time = start_time + datetime.timedelta(days=1)
start_string = start_time.strftime("%Y-%m-%dT%H:%M:%S.%f%z")
start_string = start_string[:-8] + start_string[-5:] # removing miliseconds
end_string = end_time.strftime("%Y-%m-%dT%H:%M:%S.%f%z")
end_string = end_string[:-8] + end_string[-5:]
event = {
'summary': calendar_event_form.cleaned_data['name'],
'location': calendar_event_form.cleaned_data['location'],
'description': calendar_event_form.cleaned_data['description'],
'start': {
'dateTime': start_string,
'timeZone': tz_str,
},
'end': {
'dateTime': end_string,
'timeZone': tz_str,
},
}
event = service.events().insert(calendarId=customer.calendar_id or 'primary', body=event).execute()
此代码“有效”,但我使用此代码创建的事件与我在Google日历上创建的事件和标记为全天事件之间存在明显差异。这是一个显示差异的简单图像:
我尝试过的事情:
仅定义没有结束时间的开始时间(已损坏)
发送日期仅作为字符串'2015-07-13'开始,'2015-7-14'结束(破产) p>
发送'2015-07-13T00:00:00-0700'作为开始和'2015-07-14T00:00:00-0700'和'2015-07-13T23:59:59-0700 '结束(一个在同一天结束,另一个在下一个进入1秒)
我来到这里是因为过去有人曾经解决这个问题,我不能成为唯一一个使用python的人,我希望能够做到这一点吗?
答案 0 :(得分:6)
我猜你什么时候说 -
发送日期仅作为字符串'2015-07-13'开始,'2015-7-14'结束(破产) p>
您尝试在date
字段中发送datetime
,根据google api documentation -
start.date - 日期 - 日期,格式为“yyyy-mm-dd”,如果这是全天活动。
end.date - date - 日期,格式为“yyyy-mm-dd”,如果这是全天活动。
尝试在yyyy-mm-dd
字段中以date
格式发送日期。示例 -
event = {
'summary': calendar_event_form.cleaned_data['name'],
'location': calendar_event_form.cleaned_data['location'],
'description': calendar_event_form.cleaned_data['description'],
'start': {
'date': start_string, #date here
'timeZone': tz_str,
},
'end': {
'date': end_string, #date here
'timeZone': tz_str,
},
}