我有一个间隔30分钟的TimeInterval数据列表,如下所示:
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; }
}
有人可以建议将上述数据汇总到的最佳方式:
- 小时
- 天
- 周
- 月
- 年
醇>
我尝试了建议的解决方案here,但似乎没有一个能满足上述要求。谢谢你的帮助。
上述给定示例的小时的预期结果是:
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 }
对于Days,它将是当天的总数。 对于一周,它将是一整周的总数等。基本上总和给定聚合类型的值。
答案 0 :(得分:1)
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();
}
<强>描述强>
开始:是区间中第一个项目的开始日期。
count:是您想要的间隔数。
intervalValue:是间隔之间的差异,例如以小时为单位,这可以在1,12之间变化(也可以是小数)。例如,如果将其设置为2
,则每个间隔长度为2
小时。
对于其他类型,您可以自己编写相关方法。