在c#中相互减去列表DateTime项目

时间:2016-05-02 07:31:00

标签: c# linq datetime

我有一个包含100个DateTime变量的列表,我想相互减去列表项,看它们是否相差5分钟。可以使用LINQ实现这一点。我想用i + 1,i + 2减去“i”,同样i + 1减去i + 2,i + 3 ..

 for (var i = 0; i < nodeDetails.Count;i++ )
            {
                DateTime nodeTime1 =     DateTimeOffset.Parse(gettime()).UtcDateTime;
                for (var j = i+1; j <= hadoopNodeDetails.Count; j++)
                {
                    DateTime nodeTime2 = DateTimeOffset.Parse(gettime()).UtcDateTime;
                    if (nodeTime2.Subtract(nodeTime1).TotalMinutes > 15)
                        return true;
                }
            }

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ查询从同一列表中选择两个日期,并Enumerable.Any检查两者之间的时间跨度是否为5分钟或更长时间:

 var diff5OrMore = from d1 in dateList
                   from d2 in dateList.Skip(1)
                   let diffMin = (d1 - d2).TotalMinutes
                   where diffMin >= 5
                   select new { d1, d2, diffMin };
bool anyDiff5OrMore = diff5OrMore.Any();

// bonus: output
if (anyDiff5OrMore)
{
    foreach (var x in diff5OrMore)
        System.Console.WriteLine("Date1:{0} Date2:{1} Minutes:{2}", x.d1, x.d2, x.diffMin);
}

答案 1 :(得分:0)

更多信息可能会有所帮助,但我想这可以做你想做的事情:

var result = <YourItems>
    .Join(<YourItems>, 
        left => left.<YourDateTimeProperty>, 
        right => right.<YourDateTimeProperty>.AddMinutes(5), 
        (left, right) => new { Id1 = left.Id, Id2 = right.Id });

这会根据特定的 DateTime 列为您提供项目的ID,这些项目在5分钟内有所不同。