按任意时间间隔对DateTime进行分组

我有一个IEnumerable的项类定义如下:

public class Item { public DateTime Date { get; private set; } public decimal? Value { get; private set; } public Item(DateTime date, decimal? value) { Date = date; Value = value; } } 

这些项目在特定的时间间隔内(例如5分钟)。 我需要按日期对它们进行分组,但需要更改间隔。 例如,如果项目按以下顺序排列:

 2010-08-24 00:05 2010-08-24 00:10 2010-08-24 00:15 2010-08-24 00:20 2010-08-24 00:25 2010-08-24 00:30 

我想将它们分成15分钟的间隔,结果应如下所示:

 2010-08-24 00:15 2010-08-24 00:30 

间隔由另一个类提供,但我可以得到表示该间隔的毫秒数(例如,Interval.FromMinutes(5).GetMilliseconds()应该返回300000)。 问题是如何编写一个允许我这样做的分组函数: data = items.GroupBy(t => GroupingFunction(t.DateTime, interval))并获得该结果?

更新:间隔不一定以分钟为单位。 它可能是几小时,几分钟甚至几天。

像这样的东西?

  DateTime[] dateTimes = new[] { new DateTime(2010, 8, 24, 0, 5, 0), new DateTime(2010, 8, 24, 0, 10, 0), new DateTime(2010, 8, 24, 0, 15, 0), new DateTime(2010, 8, 24, 0, 20, 0), new DateTime(2010, 8, 24, 0, 25, 0), new DateTime(2010, 8, 24, 0, 30, 0) }; TimeSpan interval = new TimeSpan(0, 15, 0); // 15 minutes. var groupedTimes = from dt in dateTimes group dt by dt.Ticks/interval.Ticks into g select new {Begin = new DateTime(g.Key*interval.Ticks), Values = g.ToList()}; foreach (var value in groupedTimes) { Console.WriteLine(value.Begin); Console.WriteLine("\t{0}", String.Join(", ", value.Values)); } 
  data = items.GroupBy(t => (int)(t.DateTime.Minutes/interval))) 

你试过模数分组吗?

未经测试的意识流伪代码如下:

 data = items.GroupBy(t => t.TimeInterval % 15 == 0);