是否工作日节假日判定

根据节假日表分析当前日期是否属于节假日配置表的时间以及判定当前日期是否属于双休日

首先建一张节假日表TRA_PricingHoliday  ID  节假日时间  HDate   是否工作日 HType  2表示不上班 非工作日,1表示正常上班工作日

判定代码:

private string _strWorkingDayAM = "00:00";//工作时间
        private string _strWorkingDayPM = "23:59";
        private string _strRestDay = "6,7";//周几休息日 周六周日为 6,7

        private TimeSpan dspWorkingDayAM;//工作时间
        private TimeSpan dspWorkingDayPM;//下午工作时间
        clsArrayList myArrayList;
        /// <summary>
        /// 是否周休日
        /// </summary>
        /// <returns></returns>
        private bool m_IsWorkingDay()
        {
            string strWeekNow = this.m_GetWeekNow();//当前周几
            //判断是否休息日
            for (int i = 0; i < myArrayList.p_Count; i++)
            {
                if (strWeekNow == myArrayList.m_GetItem(i))
                {
                    return false;
                }
            }

            //判断当前时间是否在工作时间段内

            TimeSpan dspNow = DateTime.Now.TimeOfDay;
            //string date = DateTime.Now.ToShortDateString();

            if (dspNow > dspWorkingDayAM && dspNow < dspWorkingDayPM)
            {
                return true;//是在工作时间内
            }
            return false;//不是在工作时间内
        }

        /// <summary>
        /// 初始化默认值
        /// </summary>
        private void m_InitWorkingDay()
        {
            dspWorkingDayAM = DateTime.Parse(_strWorkingDayAM).TimeOfDay;
            dspWorkingDayPM = DateTime.Parse(_strWorkingDayPM).TimeOfDay;
            myArrayList = new clsArrayList(_strRestDay, ‘,‘);
        }

        /// <summary>
        /// 获取当前周几
        /// </summary>
        /// <returns></returns>
        private string m_GetWeekNow()
        {
            string strWeek = DateTime.Now.DayOfWeek.ToString();
            switch (strWeek)
            {
                case "Monday":
                    return "1";
                case "Tuesday":
                    return "2";
                case "Wednesday":
                    return "3";
                case "Thursday":
                    return "4";
                case "Friday":
                    return "5";
                case "Saturday":
                    return "6";
                case "Sunday":
                    return "7";
            }
            return "0";
        }
        /// <summary>
        /// 初始化1是工作日 2 是非工作日
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmManagement_Load(object sender, EventArgs e)
        {
            this.m_InitWorkingDay();

            bool bol = this.m_IsWorkingDay();

            int resultYesOrNo = GetIsWorkDate();

            //双休日和工作日判断
            if ((bol.ToString().Equals(true)) && resultYesOrNo == 1)
            {
                this.labelX1.Text = "今天是工作日非节假日";
            }
            else if (resultYesOrNo == 1)
            {
                this.labelX1.Text = "今天是工作日非节假日";

            }
            else if ((bol.Equals(true)))
            {
                this.labelX1.Text = "今天是工作日";
            }
            else
            {
                this.labelX1.Text = "今天是节假日非工作日";

            }

        }

        /// <summary>
        /// 获取是否工作日的类型 1工作日 2 非工作日
        /// </summary>
        /// <returns></returns>
        public int GetIsWorkDate()
        {
            string date = DateTime.Now.ToString("yyyy-MM-dd");
            string sqlWork = "SELECT HType FROM TRA_PricingHoliday WHERE  HDate=‘" + date + "‘";
            int iresult = 0;
            string htype = null;
            try
            {
                DataTable dt = helper.Selectinfo(sqlWork);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    //从数据库得到字段的值
                      htype = dt.Rows[0]["HType"].ToString();
                }
                if (htype=="1")
                {
                    return iresult=1;
                }
                if (htype == "2")
                {
                    return iresult =2;
                }
            }
            catch { }
            return iresult;
        }

使用类:

public  class clsArrayList
    {
        public int p_Count = -1; //数据组数
        private string[] myArray1; //一维矩阵
        private string[,] myArray2; //二维矩阵

        /// <summary>
        /// 一维字符串分隔,初始化.例: clsArrayList myArray1List=new clsArrayList("1;2;3;4;5",‘;‘)
        /// </summary>
        /// <param name="strStringSource"></param>
        /// <remarks></remarks>
        public clsArrayList(string strStringSource, char charSepartor)
        {
            try
            {
                myArray1 = strStringSource.Split(charSepartor);//截取
                p_Count = myArray1.Length;
            }
            catch (Exception ex)
            {
                clsLogHelper.m_CreateErrorLogTxt("clsArrayList(" + strStringSource + " , " + charSepartor + ")", "", ex.Message.ToString());
            }
        }

        /// <summary>
        /// 二维字符串分隔,初始化. 例: clsArrayList myArray1List=new clsArrayList("1,A;2,B;3,C;4,D;5,E" , ‘;‘ , ‘,‘)
        /// </summary>
        /// <param name="strStringSource"></param>
        /// <param name="strColumnSepartor"></param>
        /// <param name="strRowSepartor"></param>
        /// <remarks></remarks>
        public clsArrayList(string strStringSource, char charColumnSepartor, char charRowSepartor)
        {
            try
            {
                string[] strColumn; //第一次截取  ";"
                string[] strRow; //第二次截取  ","

                strColumn = strStringSource.Split(charColumnSepartor);//第一次截取
                p_Count = strColumn.Length;

                myArray2 = new string[p_Count, 2];
                for (int i = 0; i <= p_Count - 1; i++) //将数据保存 数组 myArray1 中
                {
                    strRow = strColumn[i].Split(charRowSepartor);//第二次截取
                    myArray2[i, 0] = strRow[0];
                    myArray2[i, 1] = strRow[1];
                }
            }
            catch (Exception ex)
            {
                clsLogHelper.m_CreateErrorLogTxt("clsArrayList(" + strStringSource + " , " + charColumnSepartor + " , " + charRowSepartor + ")", "", ex.Message.ToString());
            }
        }

        /// <summary>
        /// 一维字符串,取值
        /// </summary>
        /// <param name="intIndex"></param>
        /// <returns></returns>
        public string m_GetItem(int intIndex)
        {
            if (myArray1 == null)
            {
                return "";
            }
            if (p_Count == -1)
            {
                return "";
            }
            if (intIndex > p_Count - 1)
            {
                return "";
            }
            else
            {
                return myArray1[intIndex];
            }
        }

        /// <summary>
        /// 二维字符串,取值
        /// </summary>
        /// <param name="intKeyIndex"></param>
        /// <param name="intValueIndex"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        public string m_GetItem(int intKeyIndex, int intValueIndex)
        {
            if (myArray2 == null)
            {
                return "";
            }
            if (p_Count == -1)
            {
                return "";
            }
            if (intKeyIndex > p_Count - 1 || intValueIndex > 1)//Value为列,二维
            {
                return "";
            }
            else
            {
                return myArray2[intKeyIndex, intValueIndex];
            }
        }

        /// <summary>
        /// 二维字符串,通过Value 获取Key ,例: m_GetKey("1")
        /// </summary>
        /// <param name="strValue"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        public string m_GetKey(string strValue)
        {
            try
            {
                if (myArray2 == null)
                {
                    return "";
                }
                if (p_Count == -1)
                {
                    return "";
                }
                for (int i = 0; i <= p_Count - 1; i++) //通过value查找key
                {
                    if (myArray2[i, 1] == strValue)
                    {
                        return myArray2[i, 0]; //返回key的值
                    }
                }
                return "";
            }
            catch (Exception ex)
            {
                clsLogHelper.m_CreateErrorLogTxt("clsArrayList(" + strValue + ")", "", ex.Message.ToString());
                return "";
            }

        }

        /// <summary>
        /// 二维字符串,通过Key 获取Value
        /// </summary>
        /// <param name="strKey"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        public string m_GetValue(string strKey)
        {
            try
            {
                if (myArray2 == null)
                {
                    return "";
                }
                if (p_Count == -1)
                {
                    return "";
                }
                for (int i = 0; i <= p_Count - 1; i++) //通过key查找value
                {
                    if (myArray2[i, 0] == strKey)
                    {
                        return myArray2[i, 1]; //返回value的值
                    }
                }
                return "";

            }
            catch (Exception ex)
            {
                clsLogHelper.m_CreateErrorLogTxt("m_GetValue(" + strKey + ")", "", ex.Message.ToString());
                return "";
            }
        }
        

时间: 2024-10-10 10:58:28

是否工作日节假日判定的相关文章

根据工作日/节假日收货要求计算预计发货时间

1.需求: 根据下单时间orderTime(这里默认是系统时间); 客户收货时间要求:工作日=1,节假日2; 计算预计发货时间(这里需要运输时长); 2.思路:  要计算预计发货时间,(仓库的发货截止时间是当天的16:30 ;16:30以后的当做第二天的订单) 首先计算正常情况到货时间, 例如正常情况下: 某订单是8月16号的单子, 上海-->江苏省南京市  8月16号 16:30 发货, 运输时效为17小时,预计到货时间是8月17号 9:30(周六) , 然后,根据预计到货时间开始计算出客户要

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

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

WPF判断日期是工作日还是节假日

通过API(http://www.easybots.cn/holiday_api.net)获取返回信息 写一个接收的反馈的函数IsHoliday public string IsHoliday(string date) { string url = @"http://www.easybots.cn/api/holiday.php?d="; url = url + date; HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.

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

今天在工作中遇到个问题,添加工作日后并没有排除掉周末的两天,想了一上午没想出什么好的思路,后来百度搜了搜,小改了一下. /// <summary> /// 添加工作日 /// </summary> /// <param name="startTime">开始时间</param> /// <param name="addDays">需要添加的工作日</param> /// <returns&

SQLserver 向表中添加工作日,不排除节假日,只排出星期六星期日

--创建表 create table WeekDays( id int primary key identity(1,1), WeekDay nvarchar(20), Status int --判断是否启用 ) ----添加一年的工作日 DECLARE @num int DECLARE @count int set @num = 1 set @count = 1 WHILE @num <=365 --时间跨度有闰年的就是366天 begin INSERT into WeekDays VALUE

往前往后推时间(排除工作日和节假日)

1.往后推时间 public static Date getNextWorkingDay(int period) throws DBException { CodeMgr codeMgr = (CodeMgr) BizMgrRegistry.getInstance().getBizMgr( "com.leapii.code.bm.CodeMgr"); Collection publicHolidayCollection = codeMgr .getCodeByType(DORMCons

判断日期是否为法定节假日的API接口与示例函数

需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: http://tool.bitefu.net/jiari/ http://www.easybots.cn/holiday_api.net https://www.juhe.cn/docs/api/id/177 前两个看起来是个人的,最后一个是聚合数据的万年历接口. 在我的小项目中使用了前两个.感觉个人的搭建可能不会太稳定,但是聚合的api我看限制越来越多,每天只能进

Java节假日算法

类:Vacation package test; import java.io.Serializable; import java.util.Date; public class Vacation implements Serializable { private static final long serialVersionUID = 1L; private Date date; private int days; public Date getDate() { return date; }

获取截止日期,包括对节假日、补班、双休的处理

话说月光族的小明申请办了一张信用卡,银行规定,在受理成功后10个工作日(假设正常双休不上班)之后将可领取信用卡.tags:小明的本次办卡业务将在那天完成? 分析需求:根据受理日期,由10个工作日这个限制条件,计算出截止日期即可,其中需要对正常双休,国家法定节假日,补班等情况进行处理. 解决方案: 1.创建表存放国家法定节假日和补班的日期数据.(国家每年都会发布新的假期数据). 2.根据开始时间和有效工作日2个输入条件,输出截止日期. 代码段: 1 /// <summary> 2 /// 根据开