check time range overlap

目前维护的系统里面有一个关于日期与其他现有日期数据重叠的校验,之前的写法有点乱,顺手google了一把,结果发现一个很巧妙的校验方法,以及一些关于这个时间重叠的一些资料。

就是下面这个了,比之前版本的代码4个if要看起来舒服很多

(StartA <= EndB) and (EndA >= StartB)

证明部分就不抄了,利用了集合论的一个公式:

非( p 或 q )等价于( 非 p )且( 非 q )。

那么如果要区分重叠的类型是如何呢, Allen’s interval algebra 定义了13种2个区间的关系。

另外, 这个stackoverflow的问题下面还列举了一些对上面的关系的扩展的库, Time Period Library,希望后面可以用到这个库。 感谢开源软件。

refs:

https://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap

https://en.wikipedia.org/wiki/Allen%27s_interval_algebra

https://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET

Leave a Reply

Your email address will not be published. Required fields are marked *