当前时间+工作日 得到截止日期

客户希望实现计算工作日,除去公休日、节假日,并且规定的公休日上班要算作工作日。

如:2014-06-25 是礼拜三加上3天,是2014-06-28礼拜六。那么得到的时间应该是2014-06-30。

1、后台调用:

1                 int days = 3;//累计加的天数
2                 DateTime add_date = DateTime.Now;
3                 EndDate enddate = new EndDate();
4                 count_date = enddate.Get_Days(add_date, days, 0);

Code

2、实现方法:

  1         /// <summary>
  2         /// 计算当天是否为公休公休
  3         /// </summary>
  4         /// <param name="time"></param>
  5         /// <returns></returns>
  6         public static int GetPublicHoliday(DateTime time)
  7         {
  8             DBhelp db = new DBhelp();
  9             int gongXiuTianShu = 0;
 10             string endWeek = "";
 11
 12             DataTable listDayRest = db.getTable("select * from L_day_rest where rest_type=‘3‘");//公休日,上班
 13             if (listDayRest.Rows.Count > 0)
 14             {
 15                 for (int i = 0; i < listDayRest.Rows.Count; i++)
 16                 {
 17                     if (listDayRest.Rows[i]["start_date"] != null && listDayRest.Rows[i]["start_date"].ToString() != null)
 18                     {
 19                         if (time.ToShortDateString() == Convert.ToDateTime(listDayRest.Rows[i]["start_date"].ToString()).ToShortDateString())
 20                         {
 21                             return gongXiuTianShu;
 22                         }
 23                     }
 24                 }
 25             }
 26
 27             //转换成中文星期几
 28             switch (time.DayOfWeek.ToString())
 29             {
 30                 case "Sunday": endWeek = "星期天"; break;
 31                 case "Monday": endWeek = "星期一"; break;
 32                 case "Tuesday": endWeek = "星期二"; break;
 33                 case "Wednesday": endWeek = "星期三"; break;
 34                 case "Thursday": endWeek = "星期四"; break;
 35                 case "Friday": endWeek = "星期五"; break;
 36                 case "Saturday": endWeek = "星期六"; break;
 37             }
 38             listDayRest = db.getTable("select * from L_day_rest where rest_type=‘2‘");//获得法定节日
 39             if (listDayRest.Rows.Count > 0)
 40             {
 41                 string GongXiu1 = listDayRest.Rows[0]["start_date"].ToString();
 42                 string GongXiu2 = listDayRest.Rows[0]["end_time"].ToString();
 43                 for (int i = 0; i < listDayRest.Rows.Count; i++)//循环遍历法定节日
 44                 {
 45                     if (time >= Convert.ToDateTime(listDayRest.Rows[0]["start_date"].ToString()) && time < Convert.ToDateTime(listDayRest.Rows[0]["end_time"].ToString()))
 46                     {
 47                         TimeSpan ts = Convert.ToDateTime(listDayRest.Rows[0]["end_time"].ToString()) - time;
 48                         gongXiuTianShu = ts.Days + 1;
 49                     }
 50                     else if (time > Convert.ToDateTime(listDayRest.Rows[0]["start_date"].ToString()) && time <= Convert.ToDateTime(listDayRest.Rows[0]["end_time"].ToString()))
 51                     {
 52                         TimeSpan ts = Convert.ToDateTime(listDayRest.Rows[0]["end_time"].ToString()) - time;
 53                         gongXiuTianShu = ts.Days + 1;
 54                     }
 55                     else if (time == Convert.ToDateTime(listDayRest.Rows[0]["start_date"].ToString()) && time == Convert.ToDateTime(listDayRest.Rows[0]["end_time"].ToString()))
 56                     {
 57                         gongXiuTianShu = 1;
 58                     }
 59
 60                 }
 61             }
 62             if (gongXiuTianShu == 0 || listDayRest.Rows.Count == 0)
 63             {
 64                 listDayRest = db.getTable("select * from L_day_rest where rest_type=‘1‘");//获得公休日
 65                 if (listDayRest.Rows.Count > 0)
 66                 {
 67                     string GongXiu1 = listDayRest.Rows[0]["start_date"].ToString().Trim();
 68                     string GongXiu2 = listDayRest.Rows[0]["end_time"].ToString().Trim();
 69                     bool isContact = IsContact(GongXiu1, GongXiu2);
 70                     if (isContact)//公休日连续
 71                     {
 72                         if (endWeek == GongXiu1)
 73                         {
 74                             gongXiuTianShu = 2;
 75                         }
 76                         else if (endWeek == GongXiu2)
 77                         {
 78                             gongXiuTianShu = 1;
 79                         }
 80                     }
 81                     else//公休日不连续
 82                     {
 83                         if (endWeek == GongXiu1 || endWeek == GongXiu2)
 84                         {
 85                             gongXiuTianShu = 1;
 86                         }
 87                     }
 88                 }
 89             }
 90
 91             return gongXiuTianShu;
 92         }
 93
 94         /// <summary>
 95         /// 递归调用,计算天数
 96         /// </summary>
 97         /// <param name="time"></param>
 98         /// <param name="days"></param>
 99         /// <param name="date_days"></param>
100         /// <returns></returns>
101         public int Get_Days(DateTime time, int days, int date_days)
102         {
103             int gongXiuTianShu = 0;
104             //int date_days = 0;
105             int counts = 0;
106             for (int i = 1; i <= days; i++)
107             {
108                 counts = i;
109                 DateTime dates = time;
110                 gongXiuTianShu = GetPublicHoliday(dates.AddDays(i));
111
112                 if (gongXiuTianShu > 0 || counts == days)
113                 {
114                     date_days = date_days + gongXiuTianShu + i;
115                     break;
116                 }
117
118             }
119
120             if (counts > 0 && counts < days)
121             {
122                 return Get_Days(time.AddDays(date_days), days - counts, date_days);
123             }
124             else
125             {
126                 return date_days;
127             }
128         }
129
130         /// <summary>
131         /// 公休时间
132         /// </summary>
133         /// <returns></returns>
134         private static bool IsContact(string start, string end)
135         {
136             bool flag = false;//定义标示
137             switch (start)
138             {
139                 case "星期天":
140                     if (end == "星期一")
141                     {
142                         flag = true;
143                     } break;
144                 case "星期一":
145                     if (end == "星期二")
146                     {
147                         flag = true;
148                     } break;
149                 case "星期二":
150                     if (end == "星期三")
151                     {
152                         flag = true;
153                     } break;
154                 case "星期三":
155                     if (end == "星期四")
156                     {
157                         flag = true;
158                     } break;
159                 case "星期四":
160                     if (end == "星期五")
161                     {
162                         flag = true;
163                     } break;
164                 case "星期五":
165                     if (end == "星期六")
166                     {
167                         flag = true;
168                     } break;
169                 case "星期六":
170                     if (end == "星期天")
171                     {
172                         flag = true;
173                     } break;
174             }
175             return flag;
176         }

Code

3、数据库表结构:

注:以上只是实现了基本功能,并且效率不高,因水平有限,希望能有更好的方法。

当前时间+工作日 得到截止日期

时间: 2024-08-11 01:21:44

当前时间+工作日 得到截止日期的相关文章

SQL语句 计算某段时间工作日的天数(除了周六日)

--只是加了固定日期,可以根据需求给成变量形式(BY 少年工藤) -思路:根据日期区间循环判断每一天是周日(1).周六(7)不变,其他加1 1 DECLARE @DAY DATE,@COUNT INT 2 SET @DAY='20150101' 3 SET @COUNT=0 4 WHILE @DAY<='20151231' 5 BEGIN 6 SET @COUNT=@COUNT+( 7 CASE DATEPART(WEEKDAY,@DAY) WHEN 1 THEN 0 8 WHEN 7 THEN

你在编程的时候浪费了多少时间?

无论你是程序员或是其他行业的工作人员,时间是你最宝贵的资源之一.不过,开发人员常常发现自己被困在项目中,因为不注重管理他们的时间. 这篇文章提供了可提高工作效率的可操作技巧,以及如何避免不必要的浪费时间. 1.你有优先安排任务吗? 就像那些对自己的时间表有控制的人一样,开发人员常常从简单任务开始一天的工作. 他们明确地从更容易的任务开始新的一天,并且会把那些目的不明确,艰巨的任务放到一天结束的时候. 这可能会造成不必要的压力,并且会让你实际上完不成最重要的事情. 这就是为什么开发人员应该花时间去

Windows系统命令行net user命令用法

在Windows渗透测试过程中,最常用的要数net user 命令了,但是非常多的时候我们都是对Linux命令非常熟悉,对Windows命令非常熟悉或者了解用法的少只有少,为了以后工作方便,这里记录一下Windows系统中的 net user 命令的用法. 一.有问题找Help: 1 2 3 4 5 6 7 8 [c:\~]$ net user /? 此命令的语法是: NET USER [username [password | *] [options]] [/DOMAIN] username

windows7命令帮助大全

有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库中的属性以控制启动加载.CACLS 显示或修改文件的访问控制列表(ACL).CALL 从另一个批处理程序调用这一个.CD 显示当前目录的名称或将其更改.CHCP 显示或设置活动代码页数.CHDIR 显示当前目录的名称或将其更改.CHKDSK 检查磁盘并显示状态报告.CHKNTFS 显示或修改启动时间

linux的用户和组相关的命令

1.查看用户相关的id信息 id id [OPTION]... [USERNAME] 常用选项: -u: 查看用户的ID号码 -g:查看用户的基本组 -G:查看用户的所有组 2.切换用户su su [OPTION]... [-] [USER [ARG]...] 1.su root :非登录式切换,不会读取目标用户的配置 2.su - root:登录式切换,会读取用户的配置文件 3.切换账户后执行命令再切换回来:su - username -c 'command' 3.用户创建 useradd u

需求分析报告

软件需求说明书 1引言 随着计算机技术的发展,网络技术融入了社会的各个角落.由于计算机网络的快速发展,教学领域也受到了促进,网络教育随之产生,它为学生提供了几乎无限的资源和丰富的自由度,教学空间也随之拓展,这些优势都是传统教学模式所无法提供的.在日常教学活动中,学生作业的管理占很重要的一部分,提取相关的作业信息和数据,以反映真实的情况,对学校课程的管理和教学质量的提高有着重要的作用.传统的手工操作方式,易发生数据丢失,统计错误,并且劳动强度大,而且速度慢.与之相反,学生作业管理系统通过使用计算机

HDU 1074

http://acm.hdu.edu.cn/showproblem.php?pid=1074 每个任务有一个截止日期和完成时间,超过截止日期一天扣一分,问完成全部任务最少扣几分,并输出路径 最多15个任务,状态压缩一下进行dp,输出路径的话要记录每种状态的前驱,存起来逆序输出 #include <iostream> #include <cstdio> #include <cstring> #include <map> using namespace std;

WEB页面中常见的四种控件的必须的测试

以下为常规的需求,除非需求有明确说明,如密码输入框中可以输入空格. 输入框 1. 为空,但页面中明确说明不能为空(带有星号或者只有这一个输入框),有以下两种情况: a. 不进行输入或者使其为空:焦点离开后应有相应的提示,提交后页面无跳转并仍有相应的提示. b. 输入框中存在一个或者多个空格:焦点离开后空格被自动清除并有相应的提示,提交后页面无跳转并仍有相应的提示. 2. 输入长度超限,有以下两种情况: a. 可以输入任意长度的字符:焦点离开后应有相应的提示,提交后页面无跳转并仍有相应的提示. b

JEECG开源团队招募成员

JEECG开源团队招募成员   JEECG 快速开发平台,是开源主流的快速开发平台,荣获十大优秀开源项目,CSDN专家访谈项目.2015年开源中国最火开源项目,市场分析80%软件公司采用JEECG用于内部项目,JEECG项目创始人 张代浩,真诚邀请更多技术爱好者共同参与,让jeecg成为一个智能开发平台,为开发者谋福利. JEECG独创开发模式(Online Coding模式→代码生成器模式→手工MERGE智能开发),帮助Java项目解决80%的重复工作,让开发者更多关注业务逻辑.JEECG宗旨