在Python中计算日历预约中的空闲时间段(日期时间)

2024-09-25 04:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过exchangeewsapi获取约会,并创建包含start/end busy(datetime)时间段的json数组。我想将这些数据反转为每天获取一个空闲时间段的列表。在

办公时间从早上8点开始。 办公时间结束是下午6点

最后,我找到了如何从繁忙时段的元组中计算空闲时段的算法问题的解决方案。下面是一个简化的代码我是怎么做到的。在

from datetime import datetime, timedelta
import pprint
pp = pprint.PrettyPrinter()

tstart = datetime.strptime('08:00:00', '%H:%M:%S')
tstop = datetime.strptime('18:00:00', '%H:%M:%S')

appointments = ([
    {
        'start' : datetime.strptime('08:30:00', '%H:%M:%S'),
        'end' : datetime.strptime('10:00:00', '%H:%M:%S')
    },
    {
        'start' : datetime.strptime('09:30:00', '%H:%M:%S'),
        'end' : datetime.strptime('11:00:00', '%H:%M:%S')
    },
    {
        'start' : datetime.strptime('12:30:00', '%H:%M:%S'),
        'end' : datetime.strptime('14:00:00', '%H:%M:%S')
    },
    {
        'start' : datetime.strptime('15:30:00', '%H:%M:%S'),
        'end' : datetime.strptime('16:00:00', '%H:%M:%S')
    },
    {
        'start' : datetime.strptime('16:00:00', '%H:%M:%S'),
        'end' : datetime.strptime('17:00:00', '%H:%M:%S')
    },
    ])

"""
CORRECT FREE PERIODS ARE:
8:00 - 8:30
11:00 - 12:30
14:00 - 15:30
17:00 - 18:00
"""

tp = [(tstart , tstart)]
free_time = []
for t in appointments:
    tp.append( ( t['start'] , t['end'] ) )
tp.append( (tstop , tstop) )

for i,v in enumerate(tp):
    if i > 0:
        if (tp[i][0] - tp[i-1][1]) > timedelta(seconds=0):
            tf_start = tp[i-1][1]
            delta = tp[i][0] - tp[i-1][1]
            tf_end = tf_start + delta
            free_time.append( (tf_start ,tf_end ) )

for tp in free_time:
    print tp

Tags: infreefordatetimetimetfstart空闲