计算2个日期时间之间的工作时间

Dan*_*Dan 6 c# datetime date

给出两个日期时间.计算它们之间工作小时数的最佳方法是什么.考虑到工作时间是周一至周五8点到5点30分,周二至周五8点30分至5点30分,可能任何一天都可能是公众假期.

这是我的努力,似乎非常低效,但就迭代次数而言,IsWorkingDay方法命中数据库以查看该日期时间是否为公共假期.

任何人都可以建议任何优化或替代方案.

 public decimal ElapsedWorkingHours(DateTime start, DateTime finish)
        {

            decimal counter = 0;

            while (start.CompareTo(finish) <= 0)
            {   
                if (IsWorkingDay(start) && IsOfficeHours(start))
                {
                    start = start.AddMinutes(1);
                    counter++;
                }
                else
                {
                    start = start.AddMinutes(1);
                }
            }

            decimal hours;

            if (counter != 0)
            {
                hours = counter/60;
            }

            return hours;
        }
Run Code Online (Sandbox Code Playgroud)

Ore*_*ost 1

特别是考虑到 IsWorkingDay 方法会访问数据库以查看当天是否是公共假期

如果问题是查询次数而不是数据量,请在开始时从数据库中查询所需的整个日期范围的工作日数据,而不是在每次循环迭代中查询。