让我先解释一下情况-假设我有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;
}先感谢你的帮助,
阿米特
发布于 2021-03-18 16:29:16
我使用它来获取两个时间范围之间的重叠范围,您可以很容易地从结果中获得重叠的天数
public static (DateTime, DateTime)? GetOverlappingTimeRange((DateTime, DateTime) firstTimeRange,
(DateTime, DateTime) secondTimeRange)
{
var leftIndex = Math.Max(firstTimeRange.Item1.Ticks, secondTimeRange.Item1.Ticks);
var rightIndex = Math.Min(firstTimeRange.Item2.Ticks, secondTimeRange.Item2.Ticks);
if (leftIndex > rightIndex)
{
return null;
}
else
{
return (new DateTime(leftIndex), new DateTime(rightIndex));
}
}https://stackoverflow.com/questions/20836429
复制相似问题