我正在努力在 google calendar api 中迭代一個時間間隔并檢查一個空檔,例如:我有一個從 12:10 pm 到 6:30 pm 的時間間隔,從 12:10 到 3 pm 有 3 個事件和下午 3:10 到 4:25 和下午 5:00 到 6:20,在那天,我要檢查的事件的持續時間為 25 分鐘,我想在該時間段內進行迭代,并可能將其放置在 4下午 25 點至下午 5 點 50 分。我試過這個,但它不正確的方法:
def set_window_filter(title, windowx1, windowx2, event_duration, calendar, next_day):
schedule_date = None
if (windowx1 is not None) and (windowx2 is not None):
x = datetime.strptime(
windowx1, '%I:%M %p')
y = datetime.strptime(
windowx2, '%I:%M %p')
start_date = datetime.combine(
next_day.date(), x.time())
event_between_date = start_date
event_end_date = event_between_date timedelta(minutes=event_duration)
end_date = datetime.combine(
next_day.date(), y.time())
while event_end_date <= end_date:
if event_end_date >= end_date - timedelta(minutes=(event_duration)):
return None, False
if event_between_date < event_end_date:
event_value, events = calendar.calendar_event_func(
event_between_date, event_end_date)
print('event_value, events: ', event_value, events)
if event_value is None:
print('event_value: ', event_value)
schedule_date = event_between_date.strftime(
'%A, %d, %B, %Y %I:%M %p')
return schedule_date, False
else:
event_between_date = timedelta(minutes=10)
event_end_date = timedelta(minutes=10)
基本上 windowx1 和 windowx2 是時間段的輸入,例如下午 1 點到下午 5 點
event_value, events = calendar.calendar_event_func(
event_between_date, event_end_date)
如果在給定時間段和 None 和 [] 之間找到任何事件,此函式將回傳事件值(即 True)和事件串列,如果沒有找到,還有什么比這更好的方法。
uj5u.com熱心網友回復:
下面的此功能將找到可以安排所需持續時間的會議的最早可用時間。例如,如果所需的視窗是從 5 到 10,所需的持續時間是 1 小時,并且從 5:30 到 6:45 有一個現有會議,則該函式將回傳 6:45 的時間。
def findFirstOpenSlot(events,startTime,endTime,duration):
def parseDate(rawDate):
#Transform the datetime given by the API to a python datetime object.
return datetime.datetime.strptime(rawDate[:-6] rawDate[-6:].replace(":",""), '%Y-%m-%dT%H:%M:%S%z')
eventStarts = [parseDate(e['start'].get('dateTime', e['start'].get('date'))) for e in events]
eventEnds = [parseDate(e['end'].get('dateTime', e['end'].get('date'))) for e in events]
gaps = [start-end for (start,end) in zip(eventStarts[1:], eventEnds[:-1])]
if startTime duration < eventStarts[0]:
#A slot is open at the start of the desired window.
return startTime
for i, gap in enumerate(gaps):
if gap > duration:
#This means that a gap is bigger than the desired slot duration, and we can "squeeze" a meeting.
#Just after that meeting ends.
return eventEnds[i]
#If no suitable gaps are found, return none.
return None
函式引數如下:
- events:通過events.get獲得的原始事件物件串列。
- startTime,endTime:應放置新事件的所需視窗的開始和結束,作為python datetime。
- duration:新事件的持續時間,作為python timedelta。
如果無法安排會議,該函式將回傳None 。有了它,您可以繼續使用event.insert創建新事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474740.html
標籤:python-3.x 约会时间 谷歌日历 API
上一篇:實時確保ansibleplaybook中的兩個任務之間經過了一定的時間
下一篇:熊貓時間框架的整合
