Esempio n. 1
0
        /// <summary>
        /// 自定义配置
        /// </summary>
        /// <param name="actions"></param>
        /// <returns></returns>
        public static string Set(params Func <CronScheduleTime, CronScheduleTime>[] actions)
        {
            CronScheduleTime result = GetInstant;

            Array.ForEach(actions, action => result = action(result));

            return(result.Result);
        }
Esempio n. 2
0
        /// <summary>
        /// 对单个时间单位进行配置
        /// 例:指定每分钟的第10秒执行 Set(i=>i.SetSpecificSecond(10))
        /// </summary>
        /// <param name="secondAction">对单个时间单位的配置</param>
        /// <returns></returns>
        public static string Set(Func <CronScheduleTime, CronScheduleTime> secondAction)
        {
            CronScheduleTime result = GetInstant;

            result = secondAction(result);

            return(result.Result);
        }
Esempio n. 3
0
        /// <summary>
        /// 指定分钟内的具体秒周期,从startTime开始,endTime结束,默认每秒执行一次
        /// </summary>
        /// <param name="time"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSecondCycle(this CronScheduleTime time, int startTime, int endTime)
        {
            if (startTime.IsOverDefaultRange() || endTime.IsOverDefaultRange() || startTime > endTime)
            {
                throw new Exception("设置的周期时间异常");
            }

            time.Second = $"{startTime}-{endTime}";

            return(time);
        }
Esempio n. 4
0
 /// <summary>
 /// 设置day的默认值
 /// </summary>
 /// <param name="time"></param>
 private static void SetDayDefaultValue(this CronScheduleTime time)
 {
     if (time.Week == "?")
     {
         time.Day = time.Day == "*" ? "1" : time.Day;
     }
     else
     {
         time.Day = "?";
     }
 }
Esempio n. 5
0
        /// <summary>
        /// 指定一个月里的第几个星期的星期几,每经过该日期执行一次,默认该日期的0时0分0秒
        /// </summary>
        /// <param name="time"></param>
        /// <param name="week"></param>
        /// <param name="weekDay"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificWeek(this CronScheduleTime time, ScheduleWeek week, ScheduleDayOfWeek weekDay)
        {
            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = time.Hour.SetDefaultValue();

            time.Day = "?";

            time.Week = $"{(int)week}#{(int)weekDay}";

            return(time);
        }
Esempio n. 6
0
        /// <summary>
        /// 指定一个月里的最后一天
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static CronScheduleTime SetLastDayOfMonth(this CronScheduleTime time)
        {
            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = time.Hour.SetDefaultValue();

            time.Week = "?";

            time.Day = "L";

            return(time);
        }
Esempio n. 7
0
        /// <summary>
        /// 指定一分钟里的具体秒,每经过该秒执行一次
        /// </summary>
        /// <param name="minute"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificSecond(this CronScheduleTime time, params int[] seconds)
        {
            Array.ForEach(seconds, i =>
            {
                if (i.IsOverDefaultRange())
                {
                    throw new IndexOutOfRangeException($"设置的秒参数{i}异常");
                }
            });

            time.Second = string.Join(",", seconds);

            return(time);
        }
Esempio n. 8
0
        /// <summary>
        /// 对四个时间单位如日期/星期,小时,分钟和秒进行配置
        /// 例:指定每个月的15号1点10分30秒执行 Set(i=>i.SetSpecificDay(15),i=>i.SetSpecificHour(10),i=>i.SetSpecificMinute(10),i=>i.SetSpecificSecond(30))
        /// </summary>
        /// <param name="dayAction">时间单位配置</param>
        /// <param name="hourAction">时间单位配置</param>
        /// <param name="minuteAction">时间单位配置</param>
        /// <param name="secondAction">时间单位配置</param>
        /// <returns></returns>
        public static string Set(Func <CronScheduleTime, CronScheduleTime> dayAction, Func <CronScheduleTime, CronScheduleTime> hourAction, Func <CronScheduleTime, CronScheduleTime> minuteAction, Func <CronScheduleTime, CronScheduleTime> secondAction)
        {
            CronScheduleTime result = GetInstant;

            result = dayAction(result);

            result = hourAction(result);

            result = minuteAction(result);

            result = secondAction(result);

            return(result.Result);
        }
Esempio n. 9
0
        /// <summary>
        /// 指定一个礼拜里的具体星期,每经过该日期执行一次,默认该日期的0时0分0秒
        /// </summary>
        /// <param name="time"></param>
        /// <param name="weekDay"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificWeek(this CronScheduleTime time, params ScheduleDayOfWeek[] weekDays)
        {
            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = time.Hour.SetDefaultValue();

            time.Day = "?";

            time.Week = string.Join(",", weekDays.Select(i => (int)i));

            return(time);
        }
Esempio n. 10
0
        /// <summary>
        /// 指定一天内的具体小时周期,从startTime开始,endTime结束,默认每小时0分0秒执行一次
        /// </summary>
        /// <returns></returns>
        public static CronScheduleTime SetHourCycle(this CronScheduleTime time, int startTime, int endTime)
        {
            if (startTime.IsOverDefaultRange(0, 23) || endTime.IsOverDefaultRange(0, 23) || startTime > endTime)
            {
                throw new Exception("设置的周期时间异常");
            }

            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = $"{startTime}-{endTime}";

            return(time);
        }
Esempio n. 11
0
        /// <summary>
        /// 指定一小时里的具体分钟,每经过该分钟执行一次,秒默认为0
        /// </summary>
        /// <param name="minute"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificMinute(this CronScheduleTime time, params int[] minutes)
        {
            Array.ForEach(minutes, i =>
            {
                if (i.IsOverDefaultRange())
                {
                    throw new IndexOutOfRangeException($"设置的分钟参数{i}异常");
                }
            });

            time.Second = time.Second.SetDefaultValue();

            time.Minute = string.Join(",", minutes);

            return(time);
        }
Esempio n. 12
0
        /// <summary>
        /// 指定分钟内的执行间隔时间gapTime,延后开始时间startTime,默认为0
        /// </summary>
        /// <returns></returns>
        public static CronScheduleTime SetSecondGap(this CronScheduleTime time, int gapTime, int startTime = 0)
        {
            if (gapTime.IsOverDefaultRange())
            {
                throw new Exception("设置的间隔时间异常");
            }

            if (startTime.IsOverDefaultRange())
            {
                throw new Exception("设置的延后开始时间异常");
            }

            time.Second = $"{startTime}/{gapTime}";

            return(time);
        }
Esempio n. 13
0
        /// <summary>
        /// 指定一天里的具体小时,每经过该小时执行一次,默认0分0秒
        /// </summary>
        /// <param name="minute"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificHour(this CronScheduleTime time, params int[] hours)
        {
            Array.ForEach(hours, i =>
            {
                if (i.IsOverDefaultRange(0, 23))
                {
                    throw new IndexOutOfRangeException($"设置的小时参数{i}异常");
                }
            });

            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = string.Join(",", hours);

            return(time);
        }
Esempio n. 14
0
        /// <summary>
        /// 指定一个月里最后一个星期的具体日期,默认该日期的0时0分0秒执行
        /// </summary>
        /// <param name="time"></param>
        /// <param name="weekDay">有效值[1,7],周日为1</param>
        /// <returns></returns>
        public static CronScheduleTime SetLastDayOfWeek(this CronScheduleTime time, int weekDay)
        {
            if (weekDay.IsOverDefaultRange(1, 7))
            {
                throw new IndexOutOfRangeException($"设置的具体星期参数{weekDay}异常");
            }

            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = time.Hour.SetDefaultValue();

            time.Day = "?";

            time.Week = $"{weekDay}L";

            return(time);
        }
Esempio n. 15
0
        /// <summary>
        /// 指定一天内的执行间隔时间gapTime,延后开始时间startTime,默认为0分0秒
        /// </summary>
        /// <returns></returns>
        public static CronScheduleTime SetHourGap(this CronScheduleTime time, int gapTime, int startTime = 0)
        {
            if (gapTime.IsOverDefaultRange(0, 23))
            {
                throw new Exception("设置的间隔时间异常");
            }

            if (startTime.IsOverDefaultRange(0, 23))
            {
                throw new Exception("设置的延后开始时间异常");
            }

            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = $"{startTime}/{gapTime}";

            return(time);
        }
Esempio n. 16
0
        /// <summary>
        /// 指定一年内里的具体月份,每经过该月份执行一次,默认该月份的1号0时0分0秒
        /// </summary>
        /// <param name="time"></param>
        /// <param name="months"></param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificMonth(this CronScheduleTime time, params int[] months)
        {
            Array.ForEach(months, i =>
            {
                if (i.IsOverDefaultRange(1, 12))
                {
                    throw new IndexOutOfRangeException($"设置的日期参数{i}异常");
                }
            });

            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = time.Hour.SetDefaultValue();

            time.SetDayDefaultValue();

            time.Month = string.Join(",", months);

            return(time);
        }
Esempio n. 17
0
        /// <summary>
        /// 指定一个礼拜里的具体星期,每经过该日期执行一次,默认该日期的0时0分0秒
        /// </summary>
        /// <param name="time"></param>
        /// <param name="weekDay">1-7,星期日为1</param>
        /// <returns></returns>
        public static CronScheduleTime SetSpecificWeek(this CronScheduleTime time, params int[] weekDays)
        {
            Array.ForEach(weekDays, i =>
            {
                if (i.IsOverDefaultRange(1, 7))
                {
                    throw new IndexOutOfRangeException($"设置的日期参数{i}异常");
                }
            });

            time.Second = time.Second.SetDefaultValue();

            time.Minute = time.Minute.SetDefaultValue();

            time.Hour = time.Hour.SetDefaultValue();

            time.Day = "?";

            time.Week = string.Join(",", weekDays);

            return(time);
        }
Esempio n. 18
0
 /// <summary>
 /// 指定一个月里最后一个星期的具体日期,默认该日期的0时0分0秒执行
 /// </summary>
 /// <param name="time"></param>
 /// <param name="weekDay"></param>
 /// <returns></returns>
 public static CronScheduleTime SetLastDayOfWeek(this CronScheduleTime time, ScheduleDayOfWeek weekDay)
 {
     return(time.SetLastDayOfWeek((int)weekDay));
 }
Esempio n. 19
0
 /// <summary>
 /// 指定一个礼拜的具体星期,从startTime开始,endTime结束,默认每日0时0分0秒执行一次
 /// </summary>
 /// <param name="time"></param>
 /// <param name="startTime"></param>
 /// <param name="endTime"></param>
 /// <returns></returns>
 public static CronScheduleTime SetWeekCycle(this CronScheduleTime time, ScheduleWeek startTime, ScheduleWeek endTime)
 {
     return(time.SetWeekCycle((int)startTime, (int)endTime));
 }