给定一个POCO事件{OffsetDateTime Start,OffsetDateTime End}和POCO试用程序{ OffsetDateTime Start,OffsetDateTime End}
试验通常会持续几个小时,几秒钟内就会发生。
如何测试一个事件是否发生在审判过程中?
之前出现的简单代码使用: event.Start > trial.Start & event.Start < trial.End
但转换为NodaTime,这些比较不再有效。
我怀疑,考虑到事件和试用都来自第三方库,我不得不对如何将其转换为即时和间隔做出一些假设,这可能是使用有时间限制的类型,或者使用即时类型,而不是使用OffsetDateTimes。
发布于 2017-09-29 13:43:26
注:本答案旨在“审判完全包含事件”-关于“审判重叠事件”,见马特约翰逊的答案。
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语句体。
发布于 2017-09-29 21:43:17
我可能错了,但你似乎想知道trial和event是否重叠。假设您的范围是半开放间隔(包括开始,独占结束),那么您将测试以下内容的重叠:
if (trial.Start.ToInstant() < event.End.ToInstant() &&
trial.End.ToInstant() > event.Start.ToInstant())
{
...
}https://stackoverflow.com/questions/46485420
复制相似问题