gpt4 book ai didi

c# - 如何获取 2 个范围之间的重叠天数?

转载 作者:太空狗 更新时间:2023-10-29 22:22:39 25 4
gpt4 key购买 nike

让我先解释一下情况——假设我有 4 个日期:BS、BE、PS、PE(S 表示开始,E 表示结束)。给定这些日期时,我需要知道重叠了多少天。例如:BE-05.01、BS-10.01、PS-03.01、PE-07.01结果是:3(05.01、06.01 和 07.01 重叠)

我写了下面的代码,但它看起来很乱,我想检查是否有更简单的方法来做到这一点:

private static double GetNumOfOverLappingDays(DateTime BS, DateTime BE, DateTime PS, DateTime PE)
{
//case 1:
// |--- B ---|
// |----P ---|

//case 2:
// |--- B ---|
// | --- P --- |

//case 3:
// |--- B ---|
// | --- P ---- |

//case 4:
// |--- B ---|
// | - P - |

//case 5:
// |--- B ---|
// | -------- P -------- |

double days = -1;
bool isNotOverLap = (BS > PE) || (PS > BE);

if (isNotOverLap == false)
{
//case 1
if (BS == PS && BS == PE)
{
days = (PE - PS).TotalDays;
}
//case 2
else if (BE > PS && BE < PE)
{
days = (BE - PS).TotalDays;
}
//case 3
else if (BS > PS && BS < PE)
{
days = (PE - BS).TotalDays;
}
//case 4
else if (BS < PS && BE > PE)
{
days = (PE - PS).TotalDays;
}
//case 5
else if (BS > PS && BE < PE)
{
days = (BE - PS).TotalDays;
}
}
return days+1;
}

在此先感谢您的帮助,

阿米特

最佳答案

试试这个:

    private static double GetOverlappingDays(DateTime firstStart, DateTime firstEnd, DateTime secondStart, DateTime secondEnd)
{
DateTime maxStart = firstStart > secondStart ? firstStart : secondStart;
DateTime minEnd = firstEnd < secondEnd ? firstEnd : secondEnd;
TimeSpan interval = minEnd - maxStart;
double returnValue = interval > TimeSpan.FromSeconds(0) ? interval.TotalDays : 0;
return returnValue;
}

关于c# - 如何获取 2 个范围之间的重叠天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com