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

时间:2015-07-13 06:07:04

标签: python calendar google-api google-calendar-api

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

这里以C#JAVA的语言提出了类似的问题但在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()

此代码“有效”,但我使用此代码创建的事件与我在Google日历上创建的事件和标记为全天事件之间存在明显差异。这是一个显示差异的简单图像:enter image description here

我尝试过的事情:

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

  • 发送日期仅作为字符串'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的人,我希望能够做到这一点吗?

1 个答案:

答案 0 :(得分:6)

我猜你什么时候说 -

  

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

您尝试在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,
    },
}
相关问题