CSh*_*oob 8 c# algorithm datetime
需要一些帮助.我需要计算一个特定日期的正常工作日,例如,在我们国家,我们星期一到星期五有5个正常工作日,然后在代码中我需要排除星期六和星期日,当我在我的计算中使用它时.
我需要在C#中使用类似的算法:
int GetRegularWorkingDays(DateTime startDate, DateTime endDate)
{
int nonWorkingDays = ((endDate - startDate) % 7) * 2;
return (endDate - startDate) - nonWorkingDays;
}
Run Code Online (Sandbox Code Playgroud)
我知道我的选秀很开心:(.提前致谢.=)
PS:伙计们请在下面投票选出最好/最快/最有效的答案.谢谢=)
Iai*_*ard 19
查看Code Project上的这个示例,该示例使用一种不涉及任何循环的非常有效的方式;)
它使用这种算法:
- 以周为单位计算时间跨度.叫它,W.
- 从周数减去第一周.W = W-1
- 将周数乘以每周的工作日数.叫它,D.
- 在指定的时间跨度内查找假期.叫它,H.
- 计算第一周的天数.叫它,SD.
- 计算上周的天数.叫它,ED.
- 总结所有的日子.BD = D + SD +ED H.
单线!
int workingDays = Enumerable.Range(0, Convert.ToInt32(endDate.Subtract(startDate).TotalDays)).Select(i=>new [] { DayOfWeek.Saturday, DayOfWeek.Sunday }.Contains(startDate.AddDays(i).DayOfWeek) ? 0 : 1).Sum();
Run Code Online (Sandbox Code Playgroud)
或者更有效:
DayOfWeek currDay = startDate.DayOfWeek;
int nonWorkingDays = 0;
foreach(var i in Enumerable.Range(0, Convert.ToInt32(endDate.Subtract(startDate).TotalDays)))
{
if(currDay == DayOfWeek.Sunday || currDay == DayOfWeek.Saturday)
nonWorkingDays++;
if((int)++currDay > 6) currDay = (DayOfWeek)0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7253 次 |
最近记录: |