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

  • 相关阅读:
    Remote API(RAPI)之 文件管理
    vue前端框架

    托马斯彩色回旋
    VUE?
    cookie与session
    ajax前后端分离
    djangoIII
    Django少年
    django三板斧
  • 原文地址:https://www.cnblogs.com/panxiaoming/p/6725348.html
Copyright © 2011-2022 走看看