我正在尝试在DateTimes集合的两个DateTime变量之间找到缺少的日期.
例如.
Collection
2010-01-01
2010-01-02
2010-01-03
2010-01-05
DateRange
2010-01-01 -> 2010-01-06
Run Code Online (Sandbox Code Playgroud)
会给我List<DateTime>的
2010-01-04
2010-01-06
Run Code Online (Sandbox Code Playgroud)
我可以想到一些是实现这一点,但没有什么干净和简单
有任何想法吗?
slo*_*oth 17
我可以想到很多实现这个的方法,例如:
DateTime[] col = { new DateTime(2010, 1, 1),
new DateTime(2010, 1, 2),
new DateTime(2010, 1, 3),
new DateTime(2010, 1, 5)};
var start = new DateTime(2010, 1, 1);
var end = new DateTime(2010, 1, 6);
var range = Enumerable.Range(0, (int)(end - start).TotalDays + 1)
.Select(i => start.AddDays(i));
var missing = range.Except(col);
Run Code Online (Sandbox Code Playgroud)
你可以将范围内容放入扩展方法中
public static class extensions
{
public static IEnumerable<DateTime> Range(this DateTime startDate, DateTime endDate)
{
return Enumerable.Range(0, (int)(endDate - startDate).TotalDays + 1)
.Select(i => startDate.AddDays(i));
}
}
Run Code Online (Sandbox Code Playgroud)
那就简单了
DateTime[] col = { new DateTime(2010, 1, 1),
new DateTime(2010, 1, 2),
new DateTime(2010, 1, 3),
new DateTime(2010, 1, 5)};
var start = new DateTime(2010, 1, 1);
var end = new DateTime(2010, 1, 6);
var missing = start.Range(end).Except(col);
Run Code Online (Sandbox Code Playgroud)
但也许这不是一个高性能解决方案:-)