在不留松散的情况下选择时间间隔的实用逻辑方法是什么?

时间:2013-09-04 12:33:49

标签: datetime comparison logic intervals

我一直试图找出一种选择机器特定时期事件的实用方法。我有一个关于机器的产品到达/ process_start / process_finish次数(DateTime)的历史数据以及具有event_start / event_type / event_finish times(DateTime)的机器的事件(故障,维修,维护等)。

我希望识别产品在机器上发生的事件,从它到达它完成过程。

     foreach(var product in productList)
     var resultEvents = from events in eventList 
                        where (data.Machine == product.Machine) && (events.Start<product.Arrival && event.Finish < product.Finish)

这并没有给我正确的状态,当机器可能出现问题时我会勾勒出选项时会让人感到困惑和暧昧......是不是我也应该使用流程启动或者我正在寻找更多&amp;&amp; amp;语句?

非常感谢快速反馈:) 谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎在询问检测重叠范围,即 - 确定两个范围内的任何时间是否相交。对此的测试在我提供的重复帖子中。使用您的变量名称,如下所示:

event.Start <= product.Finish && event.Finish >= product.Arrival

假定完全包容范围。更常见的是,我们使用在开始时包含的范围和在结尾时独占的范围。这也称为“半开区间”,由[start,end)表示。这可以防止任何时刻处于两个不同的范围内。我强烈建议你使用这些。如果这样做,测试会稍微改变一下:

event.Start < product.Finish && event.Finish >= product.Arrival

这种变化很微妙,但这意味着它不会包含在产品完成时间完全的事件。