在 python 中使用 google 日历 api 创建 'all day' 活动

Creating an 'all day' event using google calendar api in python

我正在使用 google 日历 api 从另一个网站向 google 日历添加事件。我 运行 在尝试创建全天活动时遇到了问题。我可以轻松地将 datetime.timedelta(days=1) 添加到从凌晨 12 点开始的日期时间对象,但这会创建一个从 00:00 开始并在 23:59 结束的事件,而不是全天事件(有区别)

这里用 C# and JAVA 的语言解决了类似的问题,但是 none 在 python

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()

此代码 'works' 但我使用此代码创建的事件与我在 google 日历上创建并标记为全天事件的事件之间存在明显差异。这是一个显示差异的简单图像:

我尝试过的事情:

我来到这里是希望过去有人解决过这个问题,我不可能是唯一一个使用 python 的人,我可以吗?

我猜你说 -

sending date only as a string '2015-07-13' for start and '2015-7-14' for end (broke)

您尝试在 datetime 字段中发送 date,根据 google api documentation -

start.date - date - The date, in the format "yyyy-mm-dd", if this is an all-day event.

end.date - date - The date, in the format "yyyy-mm-dd", if this is an all-day event.

尝试在 date 字段中以 yyyy-mm-dd 格式发送日期。示例 -

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,
    },
}