2024年3月15日发(作者:)
一、计算逻辑:
1.初始化某一年中的所有周六和周日,比如初始化2008年的所有周六、周日,存入表
ConfigDate中;
2.添加周六、周日外的其它节假日,比如国庆节、五一节、元旦等至表ConfigDate中;
3.查询某年某月中的所有节假日,并能对某一节假日进行设置其有效性,比如我某个周六加
班,则设置该周六假日无效,实际上该天当计算的时候也是工作日;
4.当输入开始日期和结束日期后,把开始日期至结束日期的每一天与ConfigDate表中所有有
效节假日进行对比,如果没有找到则工作日总数加1;
二、计算工作日总数的操作类
using System;
using ;
using uration;
using ;
using ty;
using ;
using ntrols;
using trols;
using ts;
namespace
{
///
/// 计算开始日期到结束日期内的工作日
/// 2008-09-19
///
public class CalculateWorkDay
{
#region 构造函数
public CalculateWorkDay()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#endregion
#region 计算工作日天数
public static int CalculateWorkDays(DateTime BeginDate, DateTime EndDate)
{
string sql = "select * from ConfigDate where state='1'";
DataTable dt = new DataTable();//dt为所有有效的休息节假日数据源
dt =
ker("Yyjcpt").eDataTable(sql);
int workdays = 0;//返回值,即EndDate和BeginDate之间的工作日数
an tsDiffer = - ;//计算EndDate和
BeginDate之间相差多少天
int intDiffer = + 1;//相差天数的int值
for (int i = 0; i < intDiffer; i++)//从BeginDate开始一天天加,判断临时的日期值是
不是节假日,如果不是节假日,则该天为工作日,workdays加1
{
DateTime TempDate = s(i);
if ( > 0)
{
for (int j = 0; j < ; j++)
{
if ( ==
Time([j]["RestDate"].ToString()).Date)
{
break;
}
if ( !=
Time([j]["RestDate"].ToString()).Date && j == - 1)
{
workdays++;
}
}
}
else
{
workdays++;
}
}
return workdays;
}
#endregion
#region 调用示例及说明
//DateTime begindate = Time(());
//DateTime enddate =
Time(());
//int workdays = ateWorkDays(begindate,enddate);
// = ng();
#endregion
}


发布评论