gpt4 book ai didi

python - 在 python 中使用 google calendar api 创建一个 'all day' 事件

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:55 25 4
gpt4 key购买 nike

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

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

google api 事件创建文档是 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()

此代码“有效”,但我使用此代码创建的事件与我在谷歌日历上创建并标记为全天事件的事件之间存在明显差异。这是一个显示差异的简单图像: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 并希望能够做这类事情的人,我可以吗?

最佳答案

我猜你说 -

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

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

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

关于python - 在 python 中使用 google calendar api 创建一个 'all day' 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com