为什么 Interval.contains(Interval) 需要包含 other.start < this.end 条件?
Why does Interval.contains(Interval) need to include other.start < this.end condition?
在 Joda-Time 中,Interval.contains(Interval)
的实现如下所示:
return (thisStart <= otherStart && otherStart < thisEnd && otherEnd <= thisEnd);
我无法理解为什么需要第二部分 otherStart < thisEnd
,我。 e.为什么不
thisStart <= otherStart && otherEnd <= thisEnd
足够了。
这是评论中解释的特殊情况,以避免 other
持续时间为 0(开始 == 结束)的间隔位于 thisEnd
thisStart
时间包含,thisEnd
时间不包含
[09:00 to 10:00) contains [10:00 to 10:00) = false (otherStart equals thisEnd)
this --+
|----------| +--- not contained
| <-- other --+
this --+
|----------| +--- contained
| <-- other --+
this --+
|----------| +--- contained
| <-- other --+
因为时间点,起点等于终点。
[00:00 -> 00:10) does contain [00:00 -> 00:00)
[00:00 -> 00:10) does not contain [00:10 -> 00:10)
在 Joda-Time 中,Interval.contains(Interval)
的实现如下所示:
return (thisStart <= otherStart && otherStart < thisEnd && otherEnd <= thisEnd);
我无法理解为什么需要第二部分 otherStart < thisEnd
,我。 e.为什么不
thisStart <= otherStart && otherEnd <= thisEnd
足够了。
这是评论中解释的特殊情况,以避免 other
持续时间为 0(开始 == 结束)的间隔位于 thisEnd
thisStart
时间包含,thisEnd
时间不包含
[09:00 to 10:00) contains [10:00 to 10:00) = false (otherStart equals thisEnd)
this --+
|----------| +--- not contained
| <-- other --+
this --+
|----------| +--- contained
| <-- other --+
this --+
|----------| +--- contained
| <-- other --+
因为时间点,起点等于终点。
[00:00 -> 00:10) does contain [00:00 -> 00:00)
[00:00 -> 00:10) does not contain [00:10 -> 00:10)