/// <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); }
/// <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); }
/// <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); }
/// <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 = "?"; } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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)); }
/// <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)); }