创build一个数组或两个date之间的所有date列表

我正在生成沿着X轴的date的多系列图表。

问题是并不是图表中的所有系列在date范围内都具有相同的date。 这意味着,如果我select2月1日至3月30日,一个系列可能有2月1日开始的数据,但是只会到3月底,但另一个系列可能有整个date范围的数据。

这扭曲了我需要创build的图表。 去,鉴于查询开始时的date范围,我想生成一个date列表并填充要绘制的数据,填充那些没有数据的date为0的系列。

LINQ:

Enumerable.Range(0, 1 + end.Subtract(start).Days) .Select(offset => start.AddDays(offset)) .ToArray(); 

For循环:

 var dates = new List<DateTime>(); for (var dt = start; dt <= end; dt = dt.AddDays(1)) { dates.Add(dt); } 

编辑:至于在时间序列中填充默认值的值,可以枚举完整date范围内的所有date,如果存在则直接从系列中selectdate的值,否则直接select默认值。 例如:

 var paddedSeries = fullDates.ToDictionary(date => date, date => timeSeries.ContainsDate(date) ? timeSeries[date] : defaultValue); 
 public static IEnumerable<DateTime> GetDateRange(DateTime startDate, DateTime endDate) { if (endDate < startDate) throw new ArgumentException("endDate must be greater than or equal to startDate"); while (startDate <= endDate) { yield return startDate; startDate = startDate.AddDays(1); } } 

我知道这是一个旧的post,但尝试使用扩展方法:

  public static IEnumerable<DateTime> Range(this DateTime startDate, DateTime endDate) { return Enumerable.Range(0, (endDate - startDate).Days + 1).Select(d => startDate.AddDays(d)); } 

像这样使用它

  var dates = new DateTime(2000, 1, 1).Range(new DateTime(2000, 1, 31)); 

随意select自己的date,你不必限制自己到2000年1月。

 list = list.Where(s => s.startDate >= Input_startDate && s.endDate <= Input_endDate); 

我们的常驻艺术大师Jon Skeet有一个很好的Range类 ,可以为DateTimes和其他types做这个。