关于Excel Networkdays方法的实现
最近一个程序要求excel输出的日期差为Networkdays. 在网上找了下,没有找到很好的具体实现方法。
要说明的是,微软的Microsoft.Office.Interop.Excel已经实现的Networkdays的方法,不过前提是你要实例化一个ApplicationClass,
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); var diff = app.WorksheetFunction.NetworkDays(startDate, endDate, Type.Missing);
这样做的结果是需要一个excel进程在后台运行,如果在导出excel时可以直接用,但是在查询页面里用,我觉得太占用资源了。
我想自写一个方法来实现它,networkdays的第三个参数是加入了假日的,这个不需要,因时间问题暂时先不实现,具体代码如下:
public static int Networkdays(DateTime startDate, DateTime endDate, params DateTime[] parm) { int rd = (int)(endDate - startDate).TotalDays; if (IsWeekend(endDate) && IsWeekend(startDate) && Math.Abs(rd) < 2) return 0; if (rd == 0) return 1; int r = 0; DateTime dtTemp = startDate; if (rd >= 0) { for (int i = 0; i <= rd; i++) { r++; dtTemp = dtTemp.AddDays(i); if (IsWeekend(dtTemp)) { r--; } dtTemp = startDate; } return r; } else { for (int i = 0; i >= rd; i--) { r--; dtTemp = dtTemp.AddDays(i); if (IsWeekend(dtTemp)) { r++; } dtTemp = startDate; } return r; } } protected static bool IsWeekend(DateTime dt) { int r = (int)dt.DayOfWeek; if (r == 0 || r == 6) { return true; } else return false; } }