如何按间隔获取日期时间组
How to get groups of Datetimes by interval
我想对组中的 DateTimes 列表进行聚类。
每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() };
但它 return 不是正确的结果。
一个可能的解决方案是:
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; }
}
我想对组中的 DateTimes 列表进行聚类。 每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() };
但它 return 不是正确的结果。
一个可能的解决方案是:
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; }
}