/// <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; } }