python中的时隙可用性

时间:2012-08-15 06:24:32

标签: python

我正在为python中的应用程序编写一个插槽预订算法 像这样

from datetime import datetime, timedelta

appointments = [(datetime(2012, 5, 22, 10), datetime(2012, 5, 22, 10, 30)),
                (datetime(2012, 5, 22, 12), datetime(2012, 5, 22, 13)),
                (datetime(2012, 5, 22, 15, 30), datetime(2012, 5, 22, 17, 10))]

hours = (datetime(2012, 5, 22, 9), datetime(2012, 5, 22, 18))

def get_slots(hours, appointments, duration=timedelta(hours=1)):
    slots = sorted([(hours[0], hours[0])] + appointments + [(hours[1], hours[1])])
    for start, end in ((slots[i][1], slots[i+1][0]) for i in range(len(slots)-1)):
        assert start <= end, "Cannot attend all appointments"
        while start + duration <= end:
            print "{:%H:%M} - {:%H:%M}".format(start, start + duration)
            start += duration

如果我在9小时到18小时内检查特定日期的插槽,这对我来说很好 但它无法满足我对周或月可用性的要求。因为我想查看9小时到18小时之间的一周或一个月的可用性。

请帮助我改进我的代码,以便它可以在数小时和数月之间检查9小时到18小时之间的可用插槽。

1 个答案:

答案 0 :(得分:0)

我认为你打算hours适用于一周或一个月中的每一天(除非可能有几天休息?),因此您可以将其更改为使用time个对象。然后,对于每一天,您可以datetime.combine创建从前一天结束到当天开始的间隔。不要忘记再创建一个从最后一天开始的间隔。