添加工作日,排除时间段内节假日

今天在工作中遇到个问题,添加工作日后并没有排除掉周末的两天,想了一上午没想出什么好的思路,后来百度搜了搜,小改了一下。

/// <summary>
        /// 添加工作日
        /// </summary>
        /// <param name="startTime">开始时间</param>
        /// <param name="addDays">需要添加的工作日</param>
        /// <returns></returns>
        public static DateTime AddWorkDays(DateTime startTime, int addDays)
        {
            DateTime endTime = startTime.AddDays(addDays);
            int days = CalculateWeekendDays(startTime, endTime);
            while (days > 0)
            {
                startTime = endTime;
                endTime = endTime.AddDays(days);
                days = CalculateWeekendDays(startTime, endTime);
            }
            return endTime;
        }
        /// <summary>
        /// 计算时间段内节假日的天数
        /// </summary>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns></returns>
        public static int CalculateWeekendDays(DateTime startTime, DateTime endTime)
        {
            int count = 0;
            //遍历节假日内的日期,当日期等于周六或周日时,count++
            for (DateTime dateItem = startTime.AddDays(1); dateItem <= endTime; dateItem = dateItem.AddDays(1))
            {
                if (dateItem.DayOfWeek == DayOfWeek.Saturday || dateItem.DayOfWeek == DayOfWeek.Sunday)
                {
                    count++;
                }
            }
            return count;
        }
        static void Main(string[] args)
        {
            DateTime firstDate = DateTime.Now;
            int num = 10;
            DateTime lastTime = AddWorkDays(firstDate, num);
            Console.WriteLine("{0} 加上{1}个工作日后得到 {2} ",firstDate.ToString(),num,lastTime.ToString());
            Console.ReadKey();
        }

输出的结果为:

暂时还没发现什么问题,如果发现错误望指正!

时间: 2024-10-03 11:11:59

添加工作日,排除时间段内节假日的相关文章

统计查询时间段内工作日之和

今天有个需求是这样的,要查出本月的工作日之和,在网上搜索了一下,发现看起来最简单的是这样的: 1 DECLARE @DAY DATE,@COUNT INT 2 SET @DAY=CONVERT(VARCHAR(10),Dateadd(dd, -Datepart(dd,GetDate())+ 1,GetDate()), 23) 3 SET @COUNT=0 4 WHILE @DAY<=CONVERT(VARCHAR(100), GetDate(),23) 5 BEGIN 6 SET @COUNT=

计算两个日期之间的工作日(去掉周末和节假日)

1 package com.utouu.uphone.commons; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.ArrayList; 6 import java.util.Calendar; 7 import java.util.Date; 8 import java.util.Iterator; 9 import java.util.List; 10

Java判断一个时间是否在另一个时间段内

需求:当时间在凌晨0点至0点5分之间程序不执行. 也就是实现判断当前时间点是否在00:00:00至00:05:00之间 方法: Java代码 : /** * 判断时间是否在时间段内 * * @param date * 当前时间 yyyy-MM-dd HH:mm:ss * @param strDateBegin * 开始时间 00:00:00 * @param strDateEnd * 结束时间 00:05:00 * @return */ public static boolean isInDat

slq获取某一时间段内的全部数据

条件:根据数据库原有某一时间段数据,获取在筛选时间段内的全部数据信息: 通过分析在这筛选时间段的数据可大体分为以下3种情况: 数据库某字段的开始时间在筛选的开始时间与结束时间范围内 数据库某字段的结束时间在筛选的开始时间与结束时间范围内 数据库某字段的开始时间小于筛选的开始时间,结束时间大于筛选的结束时间 转化为sql语句为: ((startDate between '筛选开始时间' and '筛选结束时间') or (endDate between '筛选开始时间' and '筛选结束时间')

帆软报表查询时间段内的月份

用帆软报表做统计时,经常要用到查询时间段内的月份.sql如下(oracle): SELECT TO_CHAR(ADD_MONTHS(TO_DATE('${STARTTIME}', 'YYYY-MM'), ROWNUM - 1),'yyyy-MM') eDate, TO_CHAR(ADD_MONTHS(TO_DATE('${STARTTIME}', 'YYYY-MM'), ROWNUM - 1),'MM') DAY_ID, TO_CHAR(ADD_MONTHS(TO_DATE('${STARTTI

iOS 断当前时间是否在一天的某个时间段内。

应用中设置一般会存在这样的设置,如夜间勿扰模式,从8:00-23:00,此时如何判断当前时间是否在该时间段内.难点主要在于如何用NSDate生成一个8:00的时间和23:00的时间,然后用当前的时间跟这俩时间作对比就好了. 下面提供两条思路: 法1.用NSDate生成当前时间,然后转为字符串,从字符串中取出当前的年.月.日,然后再拼上时.分.秒,然后再将拼接后的字符串转为NSDate,最后用当前的时间跟自己生成的俩NSDate的时间点比较.(该方法比较笨,也不难,但看起来有点太菜了,看上去不怎么

sql查询时间段内所有周六日

查询说时间段内所有周六日 DECLARE @t TABLE(date0 DATETIME) DECLARE @st DATETIME,@et DATETIME SET @st='2007-01-01' SET @et='2008-01-01' WHILE @st <@et BEGIN INSERT INTO @t VALUES(@st) SELECT @st=DATEADD(DAY,1,@st) END SELECT date0,DATENAME(weekday,date0) FROM @t W

SQL查询出当前服务器时间是否在表T1时间段内,如果有则选择出

表T1 开始 时间         结束时间          09:00:00          12:00:00      14:00:00          17:00:00 查询出当前服务器时间是否在表T1时间段内,如果有则选择出 选出的sql结果集如下,求SQL,  注:SQL2000环境 开始 时间         结束时间           14:00:00          17:00:00 方法一: DECLARE @t TABLE (     beginTime CHAR(

Java获取两个时间段内的所有日期

import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 获取两个时间段内的所有日期,日期可跨年 */ public class GetBetweenDate { public static void main(String[] args) { List<String>