工作分配的时间累加(不能是星期天)问题

.Net技术 码拜 8年前 (2016-02-26) 803次浏览
表格:
开始日期:2016-06-01
工作                 用时(天)                最后完成日
A0                      1
A1                      3
A3                      3
B2                      2
……………………………………………………
现在要求:根据开始日期(2016-06-01) + 工作天数 = 最后完成日
A0的最后完成日是2016-06-02             (2016-06-01开始,用时1天)
A1的最后完成日是2016-06-06             (2016-06-02开始,用时3天,本应该是2016-06-05日的,但5号这日是星期日,向后推一天)。
A3的最后完成日是2016-06-09
…………………………………
工作数据估计有300条(用时没有0.5天之类,都是整数)
感觉无从下手。求指导!
解决方案

20

string[] nds = new string[] { "10/1", "1/1", "6/2" }; // 根据 sp 的提示,加上法定假日节点
public int GetDays(DateTime date, int days) // 开始日期,计划天数
{
    var holidays = nds.Select(s => DateTime.Parse(s)); // 获取法定假日,这里可能需要跨年判断,你本人想想
    var dates = Enumerable.Range(0, days) // 获取计划日期中的休息天和法定假日天数,6/2 -> 6/5 试试结果
        .Select(s => date.AddDays(s))
        .Count(c => c.DayOfWeek == DayOfWeek.Sunday || holidays.Contains(c));
    return days + dates;
}
// 调用
var beginDate = DateTime.Parse("2016-6-1"); // 开始日期
var days = GetDays(beginDate, 8); // 8 为工作日,返回包含休假的天数
var endDate = beginDate.AddDays(days); // 根据需要看是不是 -1
Console.WriteLine("{0:d}, {1:d}, {2}, {3}", beginDate, endDate, 8, days);
// 下面的代码可以根据开始日期,天数,获取工作日期的数组
var allDates = Enumerable.Range(0, 8)
    .Select(s => beginDate.AddDays(s))
    .ToArray();
Console.WriteLine(string.Join(",", allDates)); // 输出全部日期

20

直观点就是

        static void Main(string[] args)
        {
            int n = 3;
            var start = DateTime.Parse("2016-06-24");
            var end = start.AddDays(n + (int)(n / 7));
            end = start.AddDays(n + WeekOfYear(end) - WeekOfYear(start));
            Console.WriteLine("{0} - {1}", start, end);
        }
        public static int WeekOfYear(DateTime dt)
        {
            var ci = new CultureInfo("zh-CN");
            return ci.Calendar.GetWeekOfYear(dt, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
        }

你没有提及法定假问题,本人也没必要画蛇添足


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明工作分配的时间累加(不能是星期天)问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)