Introducing Radical.sh

Forget Code launches a powerful code generator for building API's

Group a list of random datetime into user specified time Interval. This feature very like Excel Pivot Table Group Date Time in C#

  1. void Main()
  2. {
  3. List<DateTime> ts = DateTimeData();
  4.  
  5. //group by 15 minutes
  6. Dictionary<DateTime,List<DateTime>> pivotDict = ts.GroupBy(t =>
  7. {
  8. var temp = t.AddMinutes(-(t.Minute % 15));
  9. temp = temp.AddSeconds(-t.Second);
  10. temp = temp.AddMilliseconds(-t.Millisecond);
  11. return temp;
  12. }).ToDictionary(gp => gp.Key, gp => gp.ToList());
  13. pivotDict.Dump();
  14.  
  15. }
  16.  
  17. public List<DateTime> DateTimeData()
  18. {
  19. var ts = new List<DateTime>();
  20. ts.Add(DateTime.Parse("2020/06/20 22:20:05"));
  21. ts.Add(DateTime.Parse("2020/06/20 22:21:06"));
  22. ts.Add(DateTime.Parse("2020/06/20 22:22:09"));
  23. ts.Add(DateTime.Parse("2020/06/20 22:24:01"));
  24. ts.Add(DateTime.Parse("2020/06/20 22:28:09"));
  25. ts.Add(DateTime.Parse("2020/06/20 22:33:01"));
  26. ts.Add(DateTime.Parse("2020/06/20 22:34:05"));
  27. ts.Add(DateTime.Parse("2020/06/20 22:38:12"));
  28. ts.Add(DateTime.Parse("2020/06/20 22:40:41"));
  29. ts.Add(DateTime.Parse("2020/06/20 22:42:12"));
  30. ts.Add(DateTime.Parse("2020/06/20 22:45:52"));
  31. ts.Add(DateTime.Parse("2020/06/20 22:46:10"));
  32. ts.Add(DateTime.Parse("2020/06/20 22:48:23"));
  33. ts.Add(DateTime.Parse("2020/06/20 22:53:45"));
  34. ts.Add(DateTime.Parse("2020/06/20 22:55:24"));
  35. ts.Add(DateTime.Parse("2020/06/20 22:56:12"));
  36. ts.Add(DateTime.Parse("2020/06/20 23:01:31"));
  37. ts.Add(DateTime.Parse("2020/06/20 23:02:31"));
  38. ts.Add(DateTime.Parse("2020/06/20 23:08:12"));
  39. ts.Add(DateTime.Parse("2020/06/20 23:09:23"));
  40. ts.Add(DateTime.Parse("2020/06/20 23:10:23"));
  41. ts.Add(DateTime.Parse("2020/06/20 23:18:42"));
  42. ts.Add(DateTime.Parse("2020/06/20 23:19:44"));
  43. ts.Add(DateTime.Parse("2020/06/20 23:22:55"));
  44. ts.Add(DateTime.Parse("2020/06/20 23:23:12"));
  45. ts.Add(DateTime.Parse("2020/06/20 23:28:10"));
  46. ts.Add(DateTime.Parse("2020/06/20 23:31:02"));
  47. ts.Add(DateTime.Parse("2020/06/20 23:33:12"));
  48. ts.Add(DateTime.Parse("2020/06/20 23:38:32"));
  49. ts.Add(DateTime.Parse("2020/06/20 23:40:11"));
  50. return ts;
  51. }


The output dictionary shows how do the groups looks like