void Main() { List<DateTime> ts = DateTimeData(); //group by 15 minutes Dictionary<DateTime,List<DateTime>> pivotDict = ts.GroupBy(t => { var temp = t.AddMinutes(-(t.Minute % 15)); temp = temp.AddSeconds(-t.Second); temp = temp.AddMilliseconds(-t.Millisecond); return temp; }).ToDictionary(gp => gp.Key, gp => gp.ToList()); pivotDict.Dump(); } public List<DateTime> DateTimeData() { var ts = new List<DateTime>(); ts.Add(DateTime.Parse("2020/06/20 22:20:05")); ts.Add(DateTime.Parse("2020/06/20 22:21:06")); ts.Add(DateTime.Parse("2020/06/20 22:22:09")); ts.Add(DateTime.Parse("2020/06/20 22:24:01")); ts.Add(DateTime.Parse("2020/06/20 22:28:09")); ts.Add(DateTime.Parse("2020/06/20 22:33:01")); ts.Add(DateTime.Parse("2020/06/20 22:34:05")); ts.Add(DateTime.Parse("2020/06/20 22:38:12")); ts.Add(DateTime.Parse("2020/06/20 22:40:41")); ts.Add(DateTime.Parse("2020/06/20 22:42:12")); ts.Add(DateTime.Parse("2020/06/20 22:45:52")); ts.Add(DateTime.Parse("2020/06/20 22:46:10")); ts.Add(DateTime.Parse("2020/06/20 22:48:23")); ts.Add(DateTime.Parse("2020/06/20 22:53:45")); ts.Add(DateTime.Parse("2020/06/20 22:55:24")); ts.Add(DateTime.Parse("2020/06/20 22:56:12")); ts.Add(DateTime.Parse("2020/06/20 23:01:31")); ts.Add(DateTime.Parse("2020/06/20 23:02:31")); ts.Add(DateTime.Parse("2020/06/20 23:08:12")); ts.Add(DateTime.Parse("2020/06/20 23:09:23")); ts.Add(DateTime.Parse("2020/06/20 23:10:23")); ts.Add(DateTime.Parse("2020/06/20 23:18:42")); ts.Add(DateTime.Parse("2020/06/20 23:19:44")); ts.Add(DateTime.Parse("2020/06/20 23:22:55")); ts.Add(DateTime.Parse("2020/06/20 23:23:12")); ts.Add(DateTime.Parse("2020/06/20 23:28:10")); ts.Add(DateTime.Parse("2020/06/20 23:31:02")); ts.Add(DateTime.Parse("2020/06/20 23:33:12")); ts.Add(DateTime.Parse("2020/06/20 23:38:32")); ts.Add(DateTime.Parse("2020/06/20 23:40:11")); return ts; }