前言:我有一个有一百个停车位的停车场。我根据指定的空格将预订存储为自由格式的开始和结束时间。我们目前允许人们查询特定时间的停车场,并可以很容易地告诉他们是否有空余空间。但我现在有一个要求,广告有多少空闲空间有1个小时的时间从7-7,跨度为5天。使用现有的查询将意味着我需要执行60个查询,这对于交互操作来说太慢了,而且对于非交互操作似乎也太笨拙了。
因此,我正在寻找一种方法来映射预订之间的时间,然后强制将其转换为可单独存储的空位。这个过程本身可能有点困难,但它也可能使查询特定可用性的数据库变得更快一些。
我想要做的是定义一个日期,然后“减去”当天的预订量,得到一个围绕这些预订量的可用时间范围的列表,然后我可以强制进入长达一小时的时段。
我自己已经完成了一半,从给定的时间开始,一直到第一次预订,跳到最后,重复到最后,但这是相当乏味的事情,我很难相信这是以前没有做过的事情。我使用的是Python,但我很乐意移植。就像..。
today = Day(start=datetime.time(7), end=datetime.time(19))
print(today.ranges)
# [(datetime.time(7), datetime.time(19))]
day.subtract(datetime.time(12), datetime.time(13))
print(today.ranges)
# [(datetime.time(7), datetime.time(12)), (datetime.time(13), datetime.time(19))]我意识到我可能已经进入了一个特定的层次,它可能只会让我受益,但这个范围和分割时间的想法正是我需要帮助的地方。有什么想法吗?
发布于 2020-01-17 22:26:46
你可以创建所有的小时时段并删除使用过的时段吗?
def create_hour_slots(start, end):
return list(zip(range(start, end), range(start+1, end+1)))
today = create_hour_slots(7, 19)
today
[(7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19)]
def remove_range(start_subtract, end_subtract, day_range):
slots_to_remove = create_hour_slots(start_subtract, end_subtract)
availability = [r in day_range for r in slots_to_remove]
if not all(availability):
unavailable = [r for r in slots_to_remove if r not in day_range]
print("Unavailable slots: {}".format(unavailable))
return False
remaining_range = [s for s in day_range if s not in slots_to_remove]
return remaining_range
remove_noon_slot = remove_range(12, 13, today)
remove_noon_slot
[(7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19)]
remove_unavailable_slot = remove_range(6, 8, today)
Unavailable slots: [(6, 7)]发布于 2020-01-18 05:53:02
如果你只想知道“有多少空闲空间,从7小时到7小时,持续5天”,那么我的建议是:
预留,仅在整个小时开始)每满小时递减计数器
每次您都可以执行一个查询来检查您有多少空闲空间。
https://stackoverflow.com/questions/59788394
复制相似问题