.Net 实例
以下代码为百度知道搜索回答原文,为方便大家查阅将作一些解释并提供更优方法。
后端代码
private void button1_Click(object sender, EventArgs e)
{
//定义时间为2013-5-6的格式
DateTime dt = new DateTime(2013, 5, 6);
//调用Result方法,第一个参数为当前日期,即你要计算的起始日期,第二个参数为起始日期后的多少天
MessageBox.Show (Result (DateTime.Now ,8).ToString ());
}
private DateTime Result(DateTime dt,int n)
{
DateTime temp = dt;
//循还n--,这里n是8
while (n-- > 0 )
{
//起始日期加1
temp = temp.AddDays(1);
//这里temp.DayOfWeek获取当前日期在一周内是星期几,返回值为整型
//下面的判断可以直接用6或7进行判断
while(temp.DayOfWeek == System.DayOfWeek.Saturday || temp.DayOfWeek == System.DayOfWeek.Sunday)
temp = temp.AddDays(1);
}
return temp;
}
小鱼的方案
以下为本人经过上面代码的基础和高人指点后得出更优的方法
基本方法逻辑:通过EXCEL表的功能生成日期序列,并生成一列辅助列,辅助列进行函数的判断工作日为递增序列,假期为最近一个工作日的序列号。如果为法定假期(因法定假期时间不确定)手动设为与最近一个工作日的序列号,周六、日假期加班手动设为递增序列,例子如下:
日期 序列
2013-8-30 1
2013-8-31 1 (周六)
2013-9-1 1 (周日)
2013-9-2 2
2013-9-3 3
.
.
生成以上两列后把这两列数据插入到数据库,获取所选或当前工作日期的序列号,加上多少个工作日后的日期,然后相加得到对应序列号的工作日期时间
EXCEL配置表
EXCEL需要用到的函数
OR(WEEKDAY(A1)=1,WEEKDAY(A4)=7)
LOOKUP(1,0/(B3:B$3<>0),B3:B$3)
IF(B3=0,LOOKUP(1,0/(B$3:B3<>0),B$3:B3)+1,B3+1))
TEXT(A4,"yyyy-m-d")