你如何检查2 OffsetDateTime是否位于另外2个OffsetDateTIme中?

时间:2017-09-29 09:03:22

标签: c# nodatime

给定POCO事件{OffsetDateTime Start,OffsetDateTime End}和POCO Trial {OffsetDateTime Start,OffsetDateTime End}

试验的典型跨度时间和事件发生在几秒钟内。

如何测试试验中是否发生了事件?

以前使用过的朴素代码:event.Start>试用。开始&& event.Start< trial.End

但转换为NodaTime,这些比较不再有效。

我怀疑我不能不对它如何转换为瞬间和间隔进行一些假设,考虑到事件和试验都来自第三方库,应该使用时间分类型,或者是时刻而不是OffsetDateTimes。

2 个答案:

答案 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.Endtrial.End是同一时刻,上面的内容将不会进入if声明正文。

答案 1 :(得分:1)

我可能错了,但似乎您想知道trialevent 是否重叠。假设您的范围是半开区间(包括开始,独占结束) - 那么您将测试重叠:

if (trial.Start.ToInstant() < event.End.ToInstant() &&
    trial.End.ToInstant() > event.Start.ToInstant())
{
    ...
}