给出两个日期时间.计算它们之间工作小时数的最佳方法是什么.考虑到工作时间是周一至周五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)
特别是考虑到 IsWorkingDay 方法会访问数据库以查看当天是否是公共假期
如果问题是查询次数而不是数据量,请在开始时从数据库中查询所需的整个日期范围的工作日数据,而不是在每次循环迭代中查询。
| 归档时间: |
|
| 查看次数: |
11981 次 |
| 最近记录: |