给定POCO事件{OffsetDateTime Start,OffsetDateTime End}和POCO Trial {OffsetDateTime Start,OffsetDateTime End}
试验的典型跨度时间和事件发生在几秒钟内。
如何测试试验中是否发生了事件?
以前使用过的朴素代码:event.Start>试用。开始&& event.Start< trial.End
但转换为NodaTime,这些比较不再有效。
我怀疑我不能不对它如何转换为瞬间和间隔进行一些假设,考虑到事件和试验都来自第三方库,应该使用时间分类型,或者是时刻而不是OffsetDateTimes。
答案 0 :(得分:1)
注意:这个答案的目的是“试验完全包含事件” - 对于“试验重叠事件”,请参阅Matt Johnson的答案。
OffsetDateTime.ToInstant
是明确的,因此您当然可以转换为Instant
值。您可能希望从试用版创建间隔:
Interval trial = new Interval(trial.Start.ToInstant(), trial.End.ToInstant());
if (trial.Contains(event.Start.ToInstant()) &&
trial.Contains(event.End.ToInstant()))
{
...
}
一个潜在的皱纹是间隔的终点是排他性的......所以如果event.End
和trial.End
是同一时刻,上面的内容将不会进入if
声明正文。
答案 1 :(得分:1)
我可能错了,但似乎您想知道trial
和event
是否重叠。假设您的范围是半开区间(包括开始,独占结束) - 那么您将测试重叠:
if (trial.Start.ToInstant() < event.End.ToInstant() &&
trial.End.ToInstant() > event.Start.ToInstant())
{
...
}