C#合并时间段

来源:互联网 发布:集群软件 编辑:程序博客网 时间:2024/06/03 14:48
 

public class CombineDateTimeSection
{
    private List<DateTimeSection> timeList = new List<DateTimeSection>() {
            new DateTimeSection{BeginTime=new DateTime(2011,3,1,10,55,0),EndTime=new DateTime(2011,3,1,11,34,0)},
            new DateTimeSection{BeginTime=new DateTime(2011,3,1,13,9,34),EndTime=new DateTime(2011,3,1,17,45,23)},
            new DateTimeSection{BeginTime=new DateTime(2011,3,1,14,23,12),EndTime=new DateTime(2011,3,1,15,24,14)},
            new DateTimeSection{BeginTime=new DateTime(2011,3,1,7,38,56),EndTime=new DateTime(2011,3,1,10,34,45)},
            new DateTimeSection{BeginTime=new DateTime(2011,3,1,6,10,58),EndTime=new DateTime(2011,3,1,8,15,28)},
            new DateTimeSection{BeginTime=new DateTime(2011,3,1,16,14,25),EndTime=new DateTime(2011,3,1,17,52,15)}
        };

    public void Union()
    {
        //先对数据排序
        timeList = timeList.OrderBy(p => p.BeginTime).ToList<DateTimeSection>();
        for (int i = 0; i < timeList.Count - 1; i++)
        {
            int j = i + 1;
            if (timeList[i].EndTime >= timeList[j].BeginTime)
            {
                //处理后一条数据的结束时间比前一条数据结束时间小的情况
                if (timeList[i].EndTime >= timeList[j].EndTime)
                {
                    timeList[j] = timeList[i];
                }
                else
                {
                    timeList[j].BeginTime = timeList[i].BeginTime;
                }
                timeList[i] = null;
            }
        }

        timeList.ForEach(
            delegate(DateTimeSection p)
            {
                if (p != null)
                {
                    Console.WriteLine("BeginTime: " + p.BeginTime + "\tEndTime: " + p.EndTime);
                }
            }
        );
    }
}
public class DateTimeSection
{
    public DateTime BeginTime { get; set; }
    public DateTime EndTime { get; set; }
}