比如今年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以上才支持
------解决思路----------------------
using System.Linq;
这是linq扩展方法,frame3.5以上开始支持,这句话的意思就是判断在_specialDates这个数组里面,是否存在特定的日期
这句就等价于下面的方法
bool IsSpecialDate(DateTime date)
{
foreach(var dt in _specialDates)
{
if(dt == date)
{
return true;
}
}
return false;
}