• 合并重叠时间段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

  • 相关阅读:
    JavascriptCore中扩展自定义函数
    Qt for Symbian应用的开发转载
    Qt Symbian 开发环境安装转载
    qt屏幕抓图
    为JavascriptCore添加自定义对象
    Tesseract OCR开源项目转载
    Joomla, Wordpress, Drupal 全面详细Pk比较转载
    Drupal,Joomla,Wordpress在内置应用功能方面的区别和比较转载
    Docker:第五章:基于centos7的docker安装配置部署教程以及基于docker Tomcat镜像使用的项目部署教程
    【JavaP6大纲】Redis篇:redis集群工作原理,协议,分布式寻址算法
  • 原文地址:https://www.cnblogs.com/panxiaoming/p/6725348.html
Copyright © 2020-2023  润新知