2017-06-01 124 views
-2

我想将群组中的日期时间列表群集化。 每隔30秒的时间间隔,ins。如何按时间间隔获取日期时间组

12:00:05, 
12:00:10, 
12:00:15, 
12:30:15, 
12:30:25 

我有时间─名单MainBookmarksList

MainBookmarksList.Add(dt1); 
MainBookmarksList.Add(dt2); 
MainBookmarksList.Add(dt3); 
MainBookmarksList.Add(dt4); 
MainBookmarksList.Add(dt5); 

现在我希望能有一个群体像这样

12:00:05, 
12:00:10, 
12:00:15, 
******** 
12:30:15, 
12:30:25 

我尝试这样做:

TimeSpan interval = new TimeSpan(0, 0, 15); 

var groupedTimes = from dt in MainBookmarksList 
        group dt by dt.Ticks/interval.Ticks 
        into g 
        select new { Begin = new DateTime(g.Key * interval.Ticks), Values = g.ToList() }; 

但它不会返回正确的结果。

回答

1

一个可能的解决办法是这样的:

static void Main(string[] args) 
    { 
     var MainBookmarksList = new List<DateTime>(); 
     MainBookmarksList.Add(new DateTime(1900, 1, 1, 12, 0, 5)); 
     MainBookmarksList.Add(new DateTime(1900, 1, 1, 12, 0, 10)); 
     MainBookmarksList.Add(new DateTime(1900, 1, 1, 12, 0, 15)); 
     MainBookmarksList.Add(new DateTime(1900, 1, 1, 12, 30, 15)); 
     MainBookmarksList.Add(new DateTime(1900, 1, 1, 12, 30, 25)); 

     var interval = new TimeSpan(0, 0, 15); 

     var groupedTimes = new List<TimeGroup>(); 
     var currentTimeGroup = new TimeGroup(MainBookmarksList[0]); 
     groupedTimes.Add(currentTimeGroup); 
     for (var i = 1; i < MainBookmarksList.Count; i++) 
     { 
      var time = MainBookmarksList[i]; 
      if (time-currentTimeGroup.Begin > interval) 
      { 
       currentTimeGroup = new TimeGroup(time); 
       groupedTimes.Add(currentTimeGroup); 
      } 
      else 
      { 
       currentTimeGroup.Values.Add(time); 
      } 
     } 
    } 

    class TimeGroup 
    { 
     public TimeGroup(DateTime dateTime) 
     { 
      Begin = dateTime; 
      Values = new List<DateTime>() { dateTime }; 
     } 

     public DateTime Begin { get; } 
     public List<DateTime> Values { get; } 
    } 
+0

完美!谢谢! –