• 计算工作日的一种思路


        因项目需要,要在.net中用c#实现计算两个时间段的工作日总数,计算逻辑如下,
    两个日期之间的星期6,星期天算休息日,不算工作日,同时可以在后台设置多段时间为公休日,比如2005-10-1至2005-10-7号为公休日,公休的日期在后台通过数据库维护。(该计算逻辑可能不能百分百涵盖工作日,有可能会在星期6或星期天也上班,大家可以根据该逻辑引申,我先抛砖引玉)
       开始在网上想找相关资料,没有发现有相关内容,自己花了点时间研究了下System.DateTime类和System.TimeSpan 类,简单实现了该逻辑.System.DateTime类估计大家都应该比较熟悉,System.TimeSpan是表示一个时间间隔,俺以前没怎么用过,大家可以查查msdn.
        实现的函数如下:

    /// <summary>
    /// 计算两个日期之间的工作日数,(星期6,星期天,不算工作日)dt1和dt2之间相隔多少工作日,其中dt3-dt4的时间为公休日。
    /// </summary>
    /// <param name="dt1">要计算的起始时间</param>
    /// <param name="dt2">要计算的结束时间</param>
    /// <param name="dt3">公休起始时间</param>
    /// <param name="dt4">公休结束时间</param>
    /// <returns>intReturn</returns>

    private int DifferDate(DateTime dt1,DateTime dt2,DateTime dt3,DateTime dt4)
    {
    int intReturn=0;//返回值,即dt2和dt1之间的工作日数

    System.TimeSpan tsDiffer
    =dt2.Date-dt1.Date;//计算dt2和dt1之间相差多少天
    int intDiffer=tsDiffer.Days;//相差天数的int值
    for(int i=0;i<intDiffer;i++)//从dt1开始一天天加,判断临时的日期值是不是星期六或星期天,如果既不是星期六,也不是星期天,而且也不在dt3和dt4之间,则该天为工作日,intReturn加1
    {
        DateTime dtTemp
    =dt1.Date.AddDays(i);
        
    if((dtTemp.DayOfWeek!=System.DayOfWeek.Sunday) && (dtTemp.DayOfWeek!=System.DayOfWeek.Saturday))
        
    {
            
    if((dtTemp.Date<dt3.Date) || (dtTemp.Date>dt4.Date))
            
    {
                intReturn
    ++;
            }

        }

        
    }

    return intReturn;

    }

    调用示例如下(大家可以在数据库中设置dt3,dt4,来动态设置公休日):

    private void Page_Load(object sender, System.EventArgs e)
    {
        DateTime dt1
    =Convert.ToDateTime("2005-08-18");
        DateTime dt2
    =Convert.ToDateTime("2005-08-31");
        DateTime dt3
    =Convert.ToDateTime("2005-08-22");
        DateTime dt4
    =Convert.ToDateTime("2005-08-24");
        
    int intDisp=this.DifferDate(dt1,dt2,dt3,dt4);
        Response.Write(intDisp
    +"<br>");
    }
  • 相关阅读:
    jquery几款不错的插件
    jQuery 闭包
    SQL高手篇:精典SQL FAQ收藏
    完美解决Excel的连接字符串与上传方法
    文件流高级压缩文件和解压缩
    jquery弹窗插件jqueryimpromptu.4.0.js
    SQL Server 2008删除行出现错误“已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行”
    那些天我们经历的实时错误—StudentMis小结
    基础很重要,查询如何“组合”!谈谈组合查询
    探究Null、Empty、VbNullstring、Nothing的异同
  • 原文地址:https://www.cnblogs.com/l_dragon/p/221036.html
Copyright © 2020-2023  润新知