我正在研究算法以計算多個日期範圍的連續重疊。它也需要有一定的重疊次數。對於下面的示例圖片,我需要3個日期不斷重疊。有效的重疊日期爲8月20日至8月23日,因爲8月24日只有2次重疊。多個日期範圍的連續重疊C#
我已經嘗試了許多方法,包括循環遍歷所有日期,並將每一個與下一個進行單獨比較。該代碼看起來像這樣。
這裏是一個.net提琴更好的可視化:https://dotnetfiddle.net/x3LfHR#。
private bool Compare(CompareDate a, CompareDate b)
{
DateTime? tStartA = a.ActiveDate;
DateTime? tEndA = a.ExpireDate;
DateTime? tStartB = b.ActiveDate;
DateTime? tEndB= b.ExpireDate;
bool overlap = (tStartA <= tEndB || tEndB == null) && (tStartB <= tEndA || tEndA == null);
DateTime? overlapStart = null;
DateTime? overlapEnd = null;
if (overlap)
{
//Find maximum start date.
overlapStart = (tStartA >= tStartB) ? tStartA : tStartB;
//Find Min End date between the two
overlapEnd = (tEndA <= tEndB) ? tEndA : tEndB;
if (overlapStart > this.overlapStart || this.overlapStart == null)
{
this.overlapStart = overlapStart;
}
if (overlapEnd < this.overlapEnd || this.overlapEnd == null)
{
this.overlapEnd = overlapEnd;
}
但是,這種方法很難找出連續的重疊日期。我試圖在https://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET上使用.Net時間段庫,但與我的情況無關。任何幫助表示讚賞。
這似乎與[此問題]非常相似(https://stackoverflow.com/q/13513932/215552)。它的答案對你有幫助嗎? –
是的,我已經用這個問題的一些方面來比較兩個日期。但是,由於這是多個日期的連續重疊,因此更加複雜。 – aoakeson
我_think_我明白。你有一組日期範圍。您需要查找聚合範圍,並且對於該範圍內的每個日期,必須至少有三個重疊的組分範圍。組成範圍的組合可以在所得到的範圍內變化,但是每個日期必須完全由至少三個組成範圍覆蓋,沒有間隙。那是對的嗎?如果是這樣,在你的例子中,8月20 - 22日滿足A,B和D,而8月23日滿足A,C和D,是嗎?假設所有這些都是正確的,那麼算法的輸入和它們的數據類型是什麼? –