当前位置: 代码迷 >> C# >> C# 怎么实现一整年的工作日数据初始化,剔除六日(法定调休的保留)和节假日
  详细解决方案

C# 怎么实现一整年的工作日数据初始化,剔除六日(法定调休的保留)和节假日

热度:47   发布时间:2016-05-05 04:58:58.0
C# 如何实现一整年的工作日数据初始化,剔除六日(法定调休的保留)和节假日
比如今年2015 点击初始化按钮之后 ,数据库表中插入365条数据,每一天都有个是否工作日的标记,如果六日和法定节假日要标记为非工作日,但是法定需要调休的六日要标记为工作日,
如何实现这样的效果呢,怎么能精确判断呢,
 if (date.DayOfWeek ==DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) //周末
只有周末的判断 ,法定节假日的判断和是否为法定调休的周末判断现在有点没有头绪?
请各位谁有好的想法和案例帮忙指点下!!谢啦

------解决思路----------------------
你这个其实没啥好考虑的,首先按默认标准,认为周一~周五是上班,周六到周日是休息
然后在赋特殊值,所谓的特殊值又分两部分,一部分是应当属于工作日的被变成休息日,一部分是休息日变成工作日,其实就是取反

就比如今年的2月18日除夕,正常属于工作日,DayOfWeek大于0并且小于6,属于工作日,特殊化取反
bool IsWorkDay(DateTime date)
{//返回true表示属于工作日
       return (int)date.DayOfWeek>0 &&  (int)date.DayOfWeek<6;
}
private DateTime[] _specialDates = new DateTime[]{new DateTime(2015,2,18)};
void main()
{
       DateTime startDate;
       DateTime endDate;
       while(startDate<endDate)
       {
                 bool isWorkDay=IsWorkDay(startDate);//判断是否是工作日
                 if(_specialDates.Any(d=>d.Date==startDate))
                 {
                           isWorkDay=!isWorkDay;//当前日期属于特殊日期,取反
                 }
                 //do something
                startDate = startDate.AddDays(1);
       }
}


------解决思路----------------------
引用:
其实说白了就是计算 两个日期之间相差的工作天数

所以关键就是确定到底哪些天属于"休息日",哪些天属于"工作日",这个只能手动录入
------解决思路----------------------
LINQ+lambda表达式
4.0以上才支持
------解决思路----------------------
引用:
请问_specialDates.Any( 这个方法是什么意思呀,数组里有这个方法吗,我这里是点不出来的呀


using System.Linq;

这是linq扩展方法,frame3.5以上开始支持,这句话的意思就是判断在_specialDates这个数组里面,是否存在特定的日期

这句就等价于下面的方法
bool IsSpecialDate(DateTime date)
{
foreach(var dt in _specialDates)
{
      if(dt == date)
      {
           return true;
      }
}
return false;
}
  相关解决方案