예제 #1
0
        /// <summary>
        /// 校验天是否在表达式范围内
        /// </summary>
        /// <param name="needCheckDay"></param>
        /// <param name="expression"></param>
        /// <returns></returns>
        public static bool CheckDay(DateTime currentTime, DateTime startTime, string expDay, string expWeek)
        {
            try
            {
                //校验expDay表达式

                //校验expWeek表达式


                //如果周包含'?',则去分析天
                if (expWeek == "?")
                {
                    if (expDay.Contains('*'))
                    {
                        return(true);
                    }
                    else if (expDay.Contains(','))
                    {
                        bool     retBl       = false;
                        string[] superDayArr = expDay.Split(',');//一级日期数组表达式
                        for (int i = 0; i < superDayArr.Length; i++)
                        {
                            if (string.IsNullOrEmpty(superDayArr[i]))
                            {
                                throw new Exception("时间字符串非法!");
                            }
                            else
                            {
                                if (superDayArr[i].Contains('#'))
                                {
                                    if (TimeOperation.DayPoundOperation(superDayArr[i].Split('#')[0], superDayArr[i].Split('#')[1], currentTime))
                                    {
                                        return(true);
                                    }
                                }
                                else if (superDayArr[i].Contains('/'))
                                {
                                    if (TimeOperation.DaysSlashOperation(currentTime, startTime, superDayArr[i].Split('/')[0], superDayArr[i].Split('/')[1]))
                                    {
                                        return(true);
                                    }
                                }
                                else if (superDayArr[i].Contains('-'))
                                {
                                    if (TimeOperation.DayHyphenOperation(superDayArr[i].Split('-')[0], superDayArr[i].Split('-')[1], currentTime.Day))
                                    {
                                        return(true);
                                    }
                                }
                                else if (superDayArr[i] == currentTime.Day.ToString())
                                {
                                    return(true);
                                }
                            }
                        }
                        return(retBl);
                    }
                    else if (expDay.Contains('#'))
                    {
                        return(TimeOperation.DayPoundOperation(expDay.Split('#')[0], expDay.Split('#')[1], currentTime));
                    }
                    else if (expDay.Contains('/'))
                    {
                        return(TimeOperation.DaysSlashOperation(currentTime, startTime, expDay.Split('/')[0], expDay.Split('/')[1]));
                    }
                    else if (expDay.Contains('-'))
                    {
                        return(TimeOperation.DayHyphenOperation(expDay.Split('-')[0], expDay.Split('-')[1], currentTime.Day));
                    }
                    else if (expDay == "W")//工作日
                    {
                        return((int)currentTime.DayOfWeek >= 1 && (int)currentTime.DayOfWeek <= 5 ? true : false);
                    }
                    else if (expDay == "H")//周末
                    {
                        return((int)currentTime.DayOfWeek == 0 || (int)currentTime.DayOfWeek == 6 ? true : false);
                    }
                    else if (expDay == currentTime.Day.ToString())
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                //如果天包含'?',则去分析周(周日:0,周一到周六:1->6)
                else if (expDay == "?")
                {
                    int dayOfWeek = (int)currentTime.DayOfWeek;  //获取当天是周几
                    if (expWeek.Contains('*'))
                    {
                        return(true);
                    }
                    else if (expWeek.Contains(','))
                    {
                        bool     bl         = false;
                        string[] expWeekArr = expWeek.Split(',');
                        for (int i = 0; i < expWeekArr.Length; i++)
                        {
                            if (expWeekArr[i].Contains('@'))
                            {
                                if (TimeOperation.AtWeekOperation(currentTime, startTime, expWeekArr[i].Split('@')[0], expWeekArr[i].Split('@')[1]))
                                {
                                    return(true);
                                }
                            }
                            else if (expWeekArr[i].Contains('#'))
                            {
                                if (TimeOperation.WeekPoundOperation(expWeekArr[i].Split('#')[0], expWeekArr[i].Split('#')[1], currentTime))
                                {
                                    return(true);
                                }
                            }
                            else if (expWeekArr[i].Contains('/'))
                            {
                                if (TimeOperation.WeekSlashOperation(startTime, currentTime, expWeekArr[i]))
                                {
                                    return(true);
                                }
                            }
                            else if (expWeekArr[i].Contains('-'))
                            {
                                if (TimeOperation.SingleWeekHyphenOperation(expWeekArr[i].Split('-')[0], expWeekArr[i].Split('-')[1], currentTime))
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "W")//工作日
                            {
                                if (dayOfWeek >= 1 && dayOfWeek <= 5)
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "H")//周末
                            {
                                if (dayOfWeek == 0 || dayOfWeek == 6)
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "F")
                            {
                                if (TimeOperation.GetWeekOfMonth(currentTime) == 1)
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "S")
                            {
                                if (TimeOperation.GetWeekOfMonth(currentTime) == 2)
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "T")
                            {
                                if (TimeOperation.GetWeekOfMonth(currentTime) == 3)
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "R")
                            {
                                if (TimeOperation.GetWeekOfMonth(currentTime) == 4)
                                {
                                    return(true);
                                }
                            }
                            else if (expWeek == "L")
                            {
                                if (TimeOperation.JudgeMonthLastWeek(currentTime))
                                {
                                    return(true);
                                }
                            }
                        }
                        return(bl);
                    }
                    else if (expWeek.Contains('@'))
                    {
                        return(TimeOperation.AtWeekOperation(currentTime, startTime, expWeek.Split('@')[0], expWeek.Split('@')[1]));
                    }
                    else if (expWeek.Contains('#'))
                    {
                        return(TimeOperation.WeekPoundOperation(expWeek.Split('#')[0], expWeek.Split('#')[1], currentTime));
                    }
                    else if (expWeek.Contains('/'))  //间隔几周,此时月份应为*
                    {
                        return(TimeOperation.WeekSlashOperation(startTime, currentTime, expWeek));
                    }
                    else if (expWeek.Contains('-'))  //从周几到周几
                    {
                        return(TimeOperation.SingleWeekHyphenOperation(expWeek.Split('-')[0], expWeek.Split('-')[1], currentTime));
                    }
                    else if (expWeek == "W")//工作日
                    {
                        return(dayOfWeek >= 1 && dayOfWeek <= 5 ? true : false);
                    }
                    else if (expWeek == "H")//周末
                    {
                        return(dayOfWeek == 0 || dayOfWeek == 6 ? true : false);
                    }
                    else if (expWeek == "F")
                    {
                        return(TimeOperation.GetWeekOfMonth(currentTime) == 1 ? true : false);
                    }
                    else if (expWeek == "S")
                    {
                        return(TimeOperation.GetWeekOfMonth(currentTime) == 2 ? true : false);
                    }
                    else if (expWeek == "T")
                    {
                        return(TimeOperation.GetWeekOfMonth(currentTime) == 3 ? true : false);
                    }
                    else if (expWeek == "R")
                    {
                        return(TimeOperation.GetWeekOfMonth(currentTime) == 4 ? true : false);
                    }
                    else if (expWeek == "L")
                    {
                        return(TimeOperation.JudgeMonthLastWeek(currentTime));
                    }
                    else   //单个周几
                    {
                        int weekInt = -1;
                        if (int.TryParse(expWeek, out weekInt))
                        {
                            return(weekInt == dayOfWeek ? true : false);
                        }
                        else
                        {
                            throw new Exception("时间字符串非法!");
                        }
                    }
                }
                //如果天,周都未包含‘?’,表示错误
                else
                {
                    throw new Exception("时间字符串非法!");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }