zoukankan      html  css  js  c++  java
  • 合并重叠时间段C#

    1、实际业务中,存在以下使用场景:

    不同的开始、结束时间,需要合并其中的重叠部分。

    例如:

    StartTime EndTime
    06:10:58 08:15:28
    07:38:56 10:34:45
    10:55:00 11:34:00
    13:09:34 17:45:23
    14:23:12 15:24:14
    16:14:25 17:52:15
    ...
    合并后为:
    StartTime EndTime
    06:10:58 10:34:45
    10:55:00 11:34:00
    13:09:34 17:52:15
    ...

    2、查阅资料,找到如下处理办法(C#):

    首先把数据读入DataTable dt里,然后

     static void CombineData()
            {
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("StartTime", Type.GetType("System.DateTime")));
                dt.Columns.Add(new DataColumn("EndTime", Type.GetType("System.DateTime")));

                DataRow row = dt.NewRow();
                row[0] = DateTime.Parse("06:10:58");
                row[1] = DateTime.Parse("08:15:28");
                dt.Rows.Add(row);

                row = dt.NewRow();
                row[0] = DateTime.Parse("07:38:56");
                row[1] = DateTime.Parse("10:34:45");
                dt.Rows.Add(row);

                row = dt.NewRow();
                row[0] = DateTime.Parse("10:55:00");
                row[1] = DateTime.Parse("11:34:00");
                dt.Rows.Add(row);

                row = dt.NewRow();
                row[0] = DateTime.Parse("13:09:34");
                row[1] = DateTime.Parse("17:45:23");
                dt.Rows.Add(row);

                row = dt.NewRow();
                row[0] = DateTime.Parse("14:23:12");
                row[1] = DateTime.Parse("15:24:14");
                dt.Rows.Add(row);

                row = dt.NewRow();
                row[0] = DateTime.Parse("16:14:25");
                row[1] = DateTime.Parse("17:52:15");
                dt.Rows.Add(row);

                for (int i = dt.Rows.Count - 1; i >= 1; i--)
                {
                    //从后往前判断
                    if (Convert.ToDateTime(dt.Rows[i - 1]["EndTime"].ToString()) > Convert.ToDateTime(dt.Rows[i]["StartTime"].ToString()) && Convert.ToDateTime(dt.Rows[i - 1]["EndTime"].ToString()) < Convert.ToDateTime(dt.Rows[i]["EndTime"].ToString()))
                    {
                        dt.Rows[i - 1]["EndTime"] = dt.Rows[i]["EndTime"];
                        dt.Rows.RemoveAt(i);
                    }
                    else if (Convert.ToDateTime(dt.Rows[i - 1]["EndTime"].ToString()) > Convert.ToDateTime(dt.Rows[i]["StartTime"].ToString()) && Convert.ToDateTime(dt.Rows[i - 1]["EndTime"].ToString()) > Convert.ToDateTime(dt.Rows[i]["EndTime"].ToString()))
                    {
                        dt.Rows.RemoveAt(i);
                        i++;
                    }
                }

                foreach (DataRow r in dt.Rows)
                {
                    Console.WriteLine(r[0].ToString()+" "+r[1].ToString());
                }
                Console.ReadLine();
            }

     3、参考资料

    http://bbs.csdn.net/topics/360064136

    http://blog.csdn.net/hcw_peter/article/details/3980723

  • 相关阅读:
    VS2013使用scanf、gets及字符串函数编译报错error C4996: 'scanf': This function or variable may be unsafe. 原因及解决方案
    关于vs2013与office系列软件一起安装出现bug的情况描述以及解决办法——打开vs2013鼠标不动/动不了
    武汉华师驾校学车笔记_纪实
    vs2013由修改模式改为输入模式。
    解析:求最大公约数的“辗转相除法原理”
    关于scanf与scanf_s的区别,以及用scanf编译出错并且提示找不到可执行文件.exe的解决办法。
    [C编译器]在VS中编译调试C程序
    使用vs编译程序选择新建”空项目“与”win32控制台应用程序“的区别。
    AngularJS+Ionic开发-1.搭建开发环境
    PetaPoco源代码学习--3.Sql类
  • 原文地址:https://www.cnblogs.com/panxiaoming/p/6725348.html
Copyright © 2011-2022 走看看