给定两个日期时间。计算它们之间的工作时间的最佳方法是什么。考虑到工作时间是周一 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;
}