场景如下:

在某一段时间内(有规律,以一个星期为最大区间),从一个时间区间中排除另外一个或者多个时间区间后,返回时间区间集合。

举例如下:

//时间区间:2018-02-01~2018-02-07
//待排除时间区间集合:2018-02-03~2018-02-04,2018-02-06~2018-02-06

设计算法如下:

public class myclass
{
public DateTime BeginDate { get; set; } public DateTime EndDate { get; set; } public List<myclass> SpCalc(List<myclass> list)
{
int Cnt = (EndDate - BeginDate).Days + ;
bool[] _temp = new bool[Cnt];
Action<int, int, bool> _calc = (bIndex, eIndex, v) =>
{
for (int i = bIndex; i <= eIndex; i++)
{
_temp[i] = v;
}
};
//初始化,全部置为true
_calc(, Cnt, true);
//需要排除的时间段全部置为false
list.ForEach(q => _calc((q.BeginDate - BeginDate).Days, (q.EndDate - BeginDate).Days, false));
var resList = new List<myclass>();
//遍历获取有效时间段
int index = , start = -;
while (index < Cnt)
{
if (_temp[index])
{
if (start == -)
start = index;
if (index == )
resList.Add(new myclass()
{
BeginDate = BeginDate.AddDays(start),
EndDate = BeginDate.AddDays(index)
});
}
else
{
if (start != -)
resList.Add(new my()
{
BeginDate = BeginDate.AddDays(start),
EndDate = BeginDate.AddDays(index - )
});
start = -;
}
index++;
}
return resList;
}
}

最新文章

  1. html页面制作css基本设置
  2. 三表联查,这是我目前写过的最长的sql语句,嗯嗯,果然遇到问题才能让我更快成长,更复杂的语句也有了一些心得了
  3. wxpython更新
  4. python Requests库在处理response时的一些陷阱
  5. pyenv 以及 virtualenv
  6. Z480联想笔记本突然没有了声音
  7. _00023 Kafka 奇怪的操作_001它们的定义Encoder达到Class数据传输水平和决心
  8. CentOS7.0安装Nginx
  9. ACM Fibonacci数 计算
  10. X-Scan使用教程
  11. 201521123064 《Java程序设计》第3周学习总结
  12. 使用Java正则表达式去掉Double类型的数据后面多余的0
  13. 3.搭建Samba服务器
  14. Linux 查找文件内容、替换
  15. wampserver安装之后出现“无法启动,因为计算机中丢失了msvr110.dll”
  16. Python中表达式与语句
  17. 【1】【leetcode-130】 被围绕的区域
  18. (4.2)mysql备份还原——备份概述
  19. 修改unity变量名但不丢失序列化值
  20. day03(接口,多态)

热门文章

  1. vue+vue-video-player实现弹窗播放视频
  2. jQuery之属性
  3. linux应用自启动配置
  4. SQL SERVER SA密码忘记,windows集成身份验证都登录不了不怎么办
  5. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp
  6. 【bzoj4311】向量 线段树对时间分治+STL-vector维护凸包
  7. 实现对一个8bit数据的指定位的置0或者置1操作,并保持其他位不变。
  8. 题解 P1200 【[USACO1.1]你的飞碟在这儿Your Ride Is He…】
  9. 浅谈Android发展趋势分析
  10. sql case用法举例