.NET实现每天8小时的计划周期安排分割逻辑

开始时间,比如 2026-03-06 ,按8个小时 为一天,有多个事项

如事项1 , 周期 12小时,事项2,周期3小时, 事项3,周期6小时,事项4,周期5小时。

生成 2026-03-06 干 事项1 8小时

生成 2026-03-07 干 事项1 4小时

生成 2026-03-07 干 事项2 3 小时

生成 2026-03-07 干 事项3 1小时

生成 2026-03-08 干 事项3 5小时

生成 2026-03-08 干 事项4 3小时

生成 2026-03-09 干 事项4 2小时

using System.Collections.Generic;

using System.Diagnostics;

namespace ConsoleApp7

{

internal class Program

{

static void Main(string\[\] args)

{

Console.WriteLine("Hello, World!");

复制代码
        Thing thing1 = new Thing() { ID = 1, hour = 2, Name = "事件1", Order = 1 };

        Thing thing2 = new Thing() { ID = 2, hour = 2, Name = "事件2", Order = 2 };


        Thing thing3 = new Thing() { ID = 3, hour = 4, Name = "事件3", Order = 3 };


        Thing thing4 = new Thing() { ID = 4, hour = 4, Name = "事件4", Order = 4 };
        Thing thing5 = new Thing() { ID = 5, hour = 4, Name = "事件5", Order = 5 };
        Thing thing6 = new Thing() { ID = 6, hour = 13, Name = "事件6", Order = 6 };
        Thing thing7 = new Thing() { ID = 7, hour = 4, Name = "事件7", Order = 7 };
        Thing thing8 = new Thing() { ID = 7, hour = 16, Name = "事件8", Order = 8 };

        List<Thing> things = new List<Thing>();

        things.Add(thing1);
        things.Add(thing2);
        things.Add(thing3);
        things.Add(thing4);
        things.Add(thing5);
        things.Add(thing6);
        things.Add(thing7);
        things.Add(thing8);
        DateTime dateTime = DateTime.Now.Date   ;
        var list = GetManagerItems(dateTime, things, 8);
        string aa = "";
        Console.ReadKey();
    }


  static List<ManagerItem> GetManagerItems ( DateTime begin, List<Thing> itmelist, int hourday=8)
  {
        List<ManagerItem> managerItems = new List<ManagerItem>();
        DateTime CurrentDate = begin;
        int  restHour= hourday;
        int itemHour = 0;
        foreach (Thing thing in itmelist)
        {
            itemHour = thing.hour;
            while (itemHour>0)               
            {

                if (itemHour <= restHour)
                {
                    ManagerItem managerItem = new ManagerItem();
                    managerItem.useHour = itemHour;
                    managerItem.date = CurrentDate;
                    managerItem.useHour = itemHour;

                    managerItem.thing = thing;
                    managerItems.Add(managerItem);
                   
                    restHour = restHour - itemHour;
                    itemHour = 0;


                }
                else                   
                {

                    ManagerItem managerItem = new ManagerItem();
                    managerItem.useHour = itemHour;
                    managerItem.date = CurrentDate;
                    managerItem.useHour = restHour;
                    managerItem.thing = thing;
                    managerItems.Add(managerItem);                     
                    
                    itemHour = itemHour- restHour;
                    restHour = 0;

                }


                if (restHour == 0) {

                    CurrentDate= CurrentDate.AddDays(1);

                    restHour = hourday;

                }


            
            
            
            }



        }



        return managerItems;

  }
 



}


public class Thing
{


    public int  ID    { get; set; }
    public string Name { get; set; }
    //工时
    public  int  hour { get; set; }

    public int Order  { get; set; }
}


public class ManagerItem { 

  public DateTime  date { get; set; }
  public int useHour { set; get; }

    public Thing thing { set; get; }

}

}

相关推荐
郝学胜-神的一滴18 分钟前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
唐青枫1 小时前
别把日志、权限写进业务方法:C#.NET 动态代理从原理到实战
c#·.net
风云2 小时前
Vane.Dispatch 1.0.0 发布:一个与容器、传输层零耦合的 .NET 服务分发引擎
微服务·mvc·.net·ndf·vane.dispatch
寺中人3 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
en.en..3 小时前
Linux exec函数族
windows
键盘会跳舞4 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
秋名RG8 小时前
Java 集合框架完全指南:从核心接口到 JDK 21 有序集合新特性
java·windows
宋军涛8 小时前
Windows 操作系统【任务计划程序】简单使用
服务器·windows
秋名RG10 小时前
Java 泛型深度解析:从类型安全到现代实践(JDK 21 视角)
java·windows·安全
奈斯先生Vector10 小时前
AIGC 视频生成换个拍法:用 Kling Video 把一张人物图变成可剪辑的短故事
开发语言·人工智能·windows·python·aigc·音视频