月月的工作日计算!(没你想得那么简单,还有公休神马的,标题要长,duang~)

每月的工作日计算!(没你想得那么简单,还有公休神马的,标题要长,duang~)
最近在搞考勤系统神马的,需要用到公休日。但是真心是麻烦。一点点来,先搞定每个月的工作日吧~
现在我有一个大家都有的思路,求各路大神来给点给力算法:
1.获取或者用户输入年份,月份,用daysInMonth获取当月的实际天数
2.用for循环从第一天开始搞,每次用dayinweek判断是不是周六周日,是就减去一天
3.最后循环完了就是工作日了。

以上。

但是感觉这样的方法怎么就这么low呢,还有,加个公休这个没法一起加就要求用户输入。比如计算出来的是20天,然后要加个公休3天(过年,十一神马的),而且万一公休全是上班日,那么那三天直接全勤就好,万一是2天周末怎么搞。
目前想法是哪天是公休,判断是否周末。是周末,不是周末。需要给操作人员给出什么提示呢
------解决思路----------------------
因为必定有4个星期,所以中间一段不需要判断,只需要判断首尾日期,然后判断特殊日期(所谓特殊就是正常来说这天应该是上班,然后设置后就是不上班,反之亦然)

至于特殊日期是事先维护好的