使用python中的google calendar api创建"全天"活动

kra*_*yzk 3 python calendar google-calendar-api google-api

我正在使用谷歌日历api将事件添加到另一个网站的谷歌日历.当我尝试创建一整天的事件时,我遇到了一个问题.我可以轻松地将datetime.timedelta(days = 1)添加到从上午12点开始的日期时间对象,但这会创建一个事件,该事件从00:00开始,到23:59结束,而不是全天事件(存在差异) )

这里用C#JAVA语言解决了类似的问题,但在python中没有

谷歌apis事件创建文档在这里.在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()
Run Code Online (Sandbox Code Playgroud)

此代码"有效",但我使用此代码创建的事件与我在Google日历上创建的事件和标记为全天事件之间存在明显差异.这是一个显示差异的简单图像:在此输入图像描述

我尝试过的事情:

  • 仅定义没有结束时间的开始时间(已损坏)

  • 发送日期仅作为字符串'2015-07-13'开始,'2015-7-14'结束(破产)

  • 发送'2015-07-13T00:00:00-0700'作为开始,'2015-07-14T00:00:00-0700'和'2015-07-13T23:59:59-0700'结束(一个完成)在同一天,另一个进入下一个1秒

我来到这里的希望是有人曾经解决过这个问题,我不能成为唯一一个使用python的人,我想能够做到这一点吗?

Ana*_*mar 6

我猜你什么时候说 -

发送日期仅作为字符串'2015-07-13'开始,'2015-7-14'结束(破产)

你尝试datedatetime现场发送,根据谷歌api文件 -

start.date - date - 日期,格式为"yyyy-mm-dd",如果这是全天事件.

end.date - date - 日期,格式为"yyyy-mm-dd",如果这是全天事件.

尝试yyyy-mm-dddate字段格式发送日期.示例 -

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,
    },
}
Run Code Online (Sandbox Code Playgroud)