ここではテストプログラムを実行しました。具体的な要件に基づいてコードを適合させることができます。 LINQのGroupBy()
述語を使用しており、完全にthis answer to a similar questionに基づいています(分単位ではなく時間単位に変更しました)。
public class Temp
{
public DateTime activityTime { get; set; }
public object item_info { get; set; }
}
もちろん、自分のクラスを使用することができます。私はテストのためだけです。
List<Temp> items = new List<Temp> //populate with dummy data
{
new Temp { activityTime = DateTime.Parse("2017-12-11 11:43:00"), item_info = "something1" },
new Temp { activityTime = DateTime.Parse("2017-12-11 11:46:00"), item_info = "something2" },
new Temp { activityTime = DateTime.Parse("2017-12-11 11:57:00"), item_info = "something3" },
new Temp { activityTime = DateTime.Parse("2017-12-11 12:02:00"), item_info = "something4" },
new Temp { activityTime = DateTime.Parse("2017-12-11 12:04:00"), item_info = "something5" },
new Temp { activityTime = DateTime.Parse("2017-12-11 12:06:00"), item_info = "something6" },
new Temp { activityTime = DateTime.Parse("2017-12-11 12:58:00"), item_info = "something7" },
new Temp { activityTime = DateTime.Parse("2017-12-11 13:05:00"), item_info = "something8" },
new Temp { activityTime = DateTime.Parse("2017-12-11 13:29:00"), item_info = "something9" },
new Temp { activityTime = DateTime.Parse("2017-12-11 14:53:00"), item_info = "something10" },
new Temp { activityTime = DateTime.Parse("2017-12-11 14:55:00"), item_info = "something11" },
new Temp { activityTime = DateTime.Parse("2017-12-11 14:59:00"), item_info = "something12" },
new Temp { activityTime = DateTime.Parse("2017-12-11 14:59:00"), item_info = 13 },
new Temp { activityTime = DateTime.Parse("2017-12-11 15:26:00"), item_info = 15 }
};
var groups = items.GroupBy(x =>
{
var stamp = x.activityTime;
stamp = stamp.AddMinutes(-(stamp.Minute));
stamp = stamp.AddMilliseconds(-stamp.Millisecond - 1000 * stamp.Second);
return stamp;
})
.Select(g => new { TimeGroup = g.Key.ToString("h tt") + " - " + g.Key.AddHours(1).ToString("h tt"), Value = g.Count() })
.ToList();
グルーピングを変更するには、GroupBy()
述語を変更します。
TimeGroup
変数を使用すると、(日付の書式設定を必要とするか、「午前2時01分 - 午前4時00」を持つために、あなたのケースのように1分を追加することができますどのような表示に基づいて変更することができます。
の間隔のために2時間:
var groups = items.GroupBy(x =>
{
var stamp = x.activityTime;
stamp = stamp.AddHours(-(stamp.Hour % 2));
stamp = stamp.AddMinutes(-(stamp.Minute));
stamp = stamp.AddMilliseconds(-stamp.Millisecond - 1000 * stamp.Second);
return stamp;
})
.Select(g => new { TimeGroup = g.Key.ToString("h tt") + " - " + g.Key.AddHours(2).ToString("h tt"), Value = g.Count() })
.ToList();
警告、この操作は、より大きなデータセットの時間重であってもよい
。