111,101
社区成员




某任务需要做15个小时。通过当前时间+15h 得出结束时间 2023/8/30 5:34:55
2023/8/29 14:34:55
2023/8/30 5:34:55
但是这个时间是包含了休息时间。需求需要按上班时间来设置 最终15个小时 得出最后正确的结束时间.最后需要注意 21:00:00~08:00:00 是跨天的 那么结束时间+1天
上班时间
08:30:00~12:00:00
13:30:00~20:00:00
21:00:00~08:00:00
想通过传入 一个开始时间 ,然后任务 小时数 两个参数 匹配上班时间算出正确的结束时间 。
最后还希望可以通过当前时间算出今天 剩余的工作时间是多少
算出每个时间段的时长,然后就是加减法了,你的一天有4个时间段。起始时间递归一下
00:00:0008:00:00 8小时12:00:00 3.5小时
08:30:00
13:30:0020:00:0024:00:00
21:00:00
public static void Main(string[] args)
{
DateTime currentDateTime = DateTime.Now;
TimeSpan remainingWorkTime = CalculateRemainingWorkTime(currentDateTime);
Console.WriteLine("剩余工作时间: " + remainingWorkTime.ToString());
}
public static TimeSpan CalculateRemainingWorkTime(DateTime currentDateTime)
{
TimeSpan remainingWorkTime = TimeSpan.Zero;
// 获取当前时间的日期部分
DateTime currentDate = currentDateTime.Date;
// 设置上班时间范围
TimeSpan workStartTime1 = new TimeSpan(8, 30, 0);
TimeSpan workEndTime1 = new TimeSpan(12, 0, 0);
TimeSpan workStartTime2 = new TimeSpan(13, 30, 0);
TimeSpan workEndTime2 = new TimeSpan(20, 0, 0);
TimeSpan workStartTime3 = new TimeSpan(21, 0, 0);
TimeSpan workEndTime3 = new TimeSpan(8, 0, 0);
// 判断当前时间是否在上班时间范围内
if (currentDateTime.TimeOfDay >= workStartTime1 && currentDateTime.TimeOfDay <= workEndTime1)
{
remainingWorkTime = workEndTime1 - currentDateTime.TimeOfDay;
}
else if (currentDateTime.TimeOfDay >= workStartTime2 && currentDateTime.TimeOfDay <= workEndTime2)
{
remainingWorkTime = workEndTime2 - currentDateTime.TimeOfDay;
}
else if (currentDateTime.TimeOfDay >= workStartTime3 || currentDateTime.TimeOfDay <= workEndTime3)
{
remainingWorkTime = workEndTime3 - currentDateTime.TimeOfDay;
}
return remainingWorkTime;
}