Beyond the dream——飛雪飄寒

————磨難不過是人生鍵盤的回車。。。。。。
posts - 80, comments - 248, trackbacks - 32, articles - -1
  博客园 :: 首页 ::  :: 联系 :: 订阅 订阅 :: 管理

.net实现工作日的计算

Posted on 2008-09-22 20:12 飛雪飄寒 阅读(1189) 评论(4)  编辑 收藏 网摘 所属分类: ASP.NET学习总结
     
     最近,在.net项目中需要实现计算两个日期间的工作日总数,下面简单介绍一下实现过程 !

     一、先介绍一下计算逻辑:
     1.初始化某一年中的所有周六和周日,比如初始化2008年的所有周六、周日,存入表ConfigDate中;
     2.添加周六、周日外的其它节假日,比如国庆节、五一节、元旦等至表ConfigDate中;
     3.查询某年某月中的所有节假日,并能对某一节假日进行设置其有效性,比如我某个周六加班,则设置该周六假日无效,实际上该天当计算的时候也是工作日;
     4.当输入开始日期和结束日期后,把开始日期至结束日期的每一天与ConfigDate表中所有有效节假日进行对比,如果没有找到则工作日总数加1;

     二、计算工作日总数的操作类
Code

     三、节假日初始化代码
Code

     四、表ConfigDate的结构
Code

     五、效果展示
   



Tag标签: 计算工作日

Feedback

#1楼    回复  引用  查看    

2008-09-23 17:57 by 中华小鹰      
楼主的这个思路好像差了点,每数一天都得在ConfigDate里面查。这样你的总时间复杂度就是O(n2)的了。



你何不存几条规则呢,比如:

abstract class Rule

{

public abstract bool Satisfy(DateTime date)

}



class WeekendRule

{

public override bool Satisfy(DateTime date)

{

是周六或周日,返回true,否则返回false

}

}



然后Calendar持有Rule的列表就可以了。
这样时间复杂度低,而且非常灵活

#2楼 [楼主]   回复  引用  查看    

2008-09-23 20:13 by 飛雪飄寒      
@中华小鹰
谢谢你的建议,你说的没错,我之前的思路和你一样,但在编写代码过程中发现这样计算起来比较麻烦,而用我现在的思路计算起来很简单,思路也非常清晰明了,还有一个更重要的原因是表ConfigDate中存的数据量不会很大,即使时间复杂度高一些,执行起来也并不会慢,并且维护起来很方便.

#3楼    回复  引用    

2008-10-10 09:26 by 老阿伯 [未注册用户]
select * from ConfigDate where state='1'

可以

换成

select * from T_Holiday where state='1' where restDate>='" + BeginDate + "' and restDate<='" + EndDate + "'"

#4楼    回复  引用    

2008-10-10 11:42 by 老阿伯 [未注册用户]
#region 取得工作日数目

public int GetDays(DateTime beginDate, DateTime endDate)
{
System.TimeSpan tsDiffer = endDate.Date - beginDate.Date;
int intDiffer = tsDiffer.Days + 1;

string strSql = "select count(1) from t_holiday where restDate>='" + beginDate + "' and restDate<='" + endDate + "'";
int holidayCount = int.Parse(DbHelperSQL.GetSingle(strSql).ToString());
return intDiffer - holidayCount;
}

#endregion

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-11-06 15:12 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:


相关搜索:
计算工作日

相关链接: