C# 查找可用的时隙C

C# 查找可用的时隙C,c#,.net,C#,.net,我们正在建立一个老虎机预订系统,但是老虎机是动态的,可以通过手持设备实时更新。我已经到了预定屏幕的阶段,我知道我有一个可用的日期和时间间隔,例如上午8点到上午10点。当我预订插槽时,我需要在表中放入2条记录,1条记录工作时间,1条记录出差时间 e、 g 插槽8am-10am 行程时间=20分钟开始8:00am结束8:20am 作业时间=30分钟开始8:20am结束8:50am 这将在日程表甘特图视图上直观显示,我们将能够看到他的旅行时间和工作时间为2个街区 因此,如果没有其他预约,那么第一个预约

我们正在建立一个老虎机预订系统,但是老虎机是动态的,可以通过手持设备实时更新。我已经到了预定屏幕的阶段,我知道我有一个可用的日期和时间间隔,例如上午8点到上午10点。当我预订插槽时,我需要在表中放入2条记录,1条记录工作时间,1条记录出差时间

e、 g

插槽8am-10am

行程时间=20分钟开始8:00am结束8:20am

作业时间=30分钟开始8:20am结束8:50am

这将在日程表甘特图视图上直观显示,我们将能够看到他的旅行时间和工作时间为2个街区

因此,如果没有其他预约,那么第一个预约将在上午8点开始,并在上午8:50结束,但我如何查看此时段是否有预约,以及是否有预约,并找到完成时间,因此我不知道如何设置下一个工作的开始时间

第二个问题——可能是我上午8点到8点30分的约会,另一个是上午9点半到上午10点,中间的空隙是因为顾客取消了,所以我需要说我有一个总计40分钟的工作,我能把它放在空白处吗?是的,完成8:30的结束时间,插入填补空白的记录。
希望这是有意义的,我想做与c。有什么想法吗?

这是一个很难回答的问题,您是如何存储数据的?另外,您的数据模式是什么样子的

我会用这样的方式:

TaskId (int)
TaskName (string)
TaskStart (DateTime)
TaskEnd (DateTime)
关于你的第一个问题,你问我如何才能知道这个时段是否有预约?答案是,检查是否有其他预约,然后确定他们的开始时间和持续时间,包括旅行。然后将旅行开始时间设置为第一次约会的结束时间。注意:在代码中,我使用NewTaskTravel作为旅行任务,使用NewTaskEndTime作为实际任务的结束时间

SELECT TaskId, TaskEnd FROM Tasks WHERE @NewTaskTravelStartTime < TaskEnd;

if TaskId is not null then 
    NewTaskTravelStartTime = TaskEnd
    NewTaskTravelEndTime = ...
end if

SELECT TaskId, TaskEnd FROM Tasks WHERE @NewTaskEndTime > TaskStart;

if TaskId is not null then
   a) warn user about conflict or 
   b) automatically re-schedule following task or 
   c) place task in different place
end if

关于你的第二个问题,我如何在预约1和预约2之间插入记录,答案是,您只需创建一个任务开始时间为8:30或其他时间的新记录,并确保结束时间不会超过下一个任务开始时间。

您可能希望了解规范设计模式,以及如何将其用作构建器的一部分,在这种情况下查找和填充可用的插槽。在这本优秀的书中多读一些。

我知道这是一个老问题,但我发现了它,我想我会对其他任何人说。请看一下.Net的这个,它具有间隙计算能力,因此您可以查找备用插槽

我用它来寻找我的一个项目中的预订缺口。我怀疑它能解决你的问题


现在可以在Nuget上找到它

Time Period Library是一个很棒的库,您链接到描述该库的文章对于理解各种时间计算难题非常有帮助。