c# - 计算一周内工作的天数而不循环?

标签 c# algorithm datetime

我需要计算工作的总天数,给定结构说明一周中的哪几天工作以及从和到日期。

我目前的算法是这样的:

protected int TotalWorkDays(DateTime From, DateTime dtTo,WorkedDays days)
    {
        int Days = 0;
        DayOfWeek DOW;
        for (DateTime curDate = From; curDate.Date <= dtTo.Date; curDate = curDate.AddDays(1))
        {
            DOW = curDate.DayOfWeek;
            if ((DOW == DayOfWeek.Sunday &  days.Sunday) |
                (DOW == DayOfWeek.Monday &  days.Monday) |
                (DOW == DayOfWeek.Tuesday &  days.Tuesday) |
                (DOW == DayOfWeek.Wednesday &  days.Wednesday) |
                (DOW == DayOfWeek.Thursday &  days.Thursday) |
                (DOW == DayOfWeek.Friday &  days.Friday) |
                (DOW == DayOfWeek.Saturday &  days.Saturday)
               )
            {
                Days += 1;
            }
        }
        return Days;
    }

我几乎肯定这可以在没有循环的情况下完成,但我似乎无法弄清楚。谁能帮我找到更高效的算法?

最佳答案

计算从和到日期之间的周数(使用减法和除法)。然后将其乘以每周工作的天数。对最终案例做一些减法(从/到日期在一周的中间)。

关于c# - 计算一周内工作的天数而不循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374706/

相关文章:

c# - 如何从输出过程类中读取最后一行?

algorithm - 网格中具有公共(public)角的所有矩形

unit-testing - 为什么在测试DateTime相等性时此单元测试失败?

datetime - 如何找出缩短 URL 的日期

java - 将字符串转换为日期 - 出现错误

c# - 在启动时以管理员身份运行

c# - 当我使用它时,我的 IF 属性在我的类(class)中被忽略了

c# - 分组 : for comprehensions in scala vs .net linq

c - 使用 BST 对结构数组进行排序的函数的时间复杂度是多少?

algorithm - 如何从 N 个元素创建所有可能分组的列表