我有一个时间间隔数据列表,相隔 30 分钟,如下所示:
List<TimeInterval> testData = new List<TimeInterval>();
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 6:00:00 AM"), End = DateTime.Parse("2012-05-09 6:30:00 AM"), Value = 1 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 6:30:00 AM"), End = DateTime.Parse("2012-05-09 7:00:00 AM"), Value = 1 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 7:00:00 AM"), End = DateTime.Parse("2012-05-09 7:30:00 AM"), Value = 1 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 7:30:00 AM"), End = DateTime.Parse("2012-05-09 8:00:00 AM"), Value = 1 });
.....
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-10 7:00:00 AM"), End = DateTime.Parse("2012-05-10 7:30:00 AM"), Value = 20 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-10 7:30:00 AM"), End = DateTime.Parse("2012-05-10 8:00:00 AM"), Value = 10 });
................... up to N number of N number of years.
public class TimeInterval
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public decimal Value { get; set; }
}
有人可以建议将上述数据汇总到的最佳方法吗:
- 小时
- 日
- 周
- 月
- 年
我在这里尝试了建议的解决方案,但似乎都没有满足上述要求。感谢您的帮助。
对于上面给出的示例,小时的期望结果是:
Lists Of:
TimeInterval() { Start = DateTime.Parse("2012-05-09 6:00:00 AM"), End = DateTime.Parse("2012-05-09 7:00:00 AM"), Value = 2 }
TimeInterval() { Start = DateTime.Parse("2012-05-09 7:00:00 AM"), End = DateTime.Parse("2012-05-09 8:00:00 AM"), Value = 2 }
...
TimeInterval() { Start = DateTime.Parse("2012-05-10 7:00:00 AM"), End = DateTime.Parse("2012-05-10 8:00:00 AM"), Value = 2 }
对于天,它将是当天的总和。对于一周,它将是整周的总计,依此类推基本上是给定聚合类型的值总和。
List<Interval> CreatHourIntervals(DateTime start, int count, int intervalValue, int val)
{
return Enumerable.Range(0,count)
.Select(x=> new Interval
{
StartDate = start.AddHours(x*intervalValue),
EndDate = start.AddHours((x + 1)*intervalValue),
value = val
}
).ToList();
}
描述
开始:是间隔中第一项的开始日期。
计数:是所需的间隔数。
intervalValue:是间隔之间的差异,例如在小时的情况下,它可以在 1,12 之间变化(也可以是小数)。 例如,如果将其设置为 2
,则每个间隔长度为 2
小时。
对于其他类型,您可以自己编写相关方法。