`
lxwt909
  • 浏览: 572288 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Cron表达式工具类

阅读更多

        Quartz调度框架里最大的亮点就是Cron表达式,他能灵活的表达任务计划周期,但由于它的语法复杂多变,要让用户去书写Cron表达式,则简直就好比要小姐从良是一样的难。所以才有了Cron表达式工具类,使用它可以通过接收一些必要参数自动输出一个标准的Cron表达式。废话不多说,亮剑看码:

package com.yida.framework.base.util.quartz;

import java.util.Date;

import com.yida.framework.base.util.DateUtil;
import com.yida.framework.modules.po.TaskSchedule;
import com.yida.framework.modules.web.model.TaskScheduleModel;

/**
 * @ClassName: CronUtil
 * @Description: Cron表达式工具类
 * @author Lanxiaowei(736031305@qq.com)
 * @date 2015年12月11日 上午10:12:18
 *
 */
public class CronUtil {
	
	/**
	 * 
	 *方法摘要:构建TaskSchedule实例
	 *@param  taskScheduleModel
	 *@return TaskSchedule
	 */
	/**
	 * 所选作业类型:
	 * 1  -> 简单任务[一次或多次]
	 * 2  -> 每天
	 * 4  -> 每周
	 * 8  -> 每月
	 * 16 -> 每时间段
	 * 32 -> 系统启动时
	 */
	public static TaskSchedule createTaskSchedule(TaskSchedule taskSchedule,TaskScheduleModel taskScheduleModel){
		if(null == taskSchedule){
			taskSchedule = new TaskSchedule();
		}
		taskSchedule.setScheduleName(taskScheduleModel.getScheduleName());
	    //计划执行开始时间
		Date startTime = taskScheduleModel.getScheduleStartTime();
		if(null != startTime){
			taskSchedule.setScheduleStartTime(startTime);
		}
		
		//计划状态[默认:未运行]
		taskSchedule.setScheduleStatus(taskScheduleModel.getScheduleStatus());
		
		//计划详细描述
		String description = createDescription(taskScheduleModel);
		taskSchedule.setScheduleDescription(description);
		
		//简单任务
		if(taskScheduleModel.getJobType().intValue() == 1){
			//计划类型
			taskSchedule.setScheduleType(TaskSchedule.SCHEDULE_TYPE_SIMPLE);
			//计划延迟
			taskSchedule.setScheduleInterval(taskScheduleModel.getScheduleInterval());
			//计划重复执行次数
			taskSchedule.setScheduleRepeatCount(taskScheduleModel.getScheduleRepeatCount());
			taskSchedule.setScheduleStartTime(taskScheduleModel.getScheduleStartTime());
			taskSchedule.setScheduleEndTime(taskScheduleModel.getScheduleEndTime());
		}
		//系统启动时
		else if(taskScheduleModel.getJobType().intValue() == 64){
			//计划类型
			taskSchedule.setScheduleType(TaskSchedule.SCHEDULE_TYPE_WEB_STARTUP);
		}
		else {
			//Cron表达式
			String cron = createCronExpression(taskScheduleModel);
			taskSchedule.setScheduleCron(cron);
			
			//计划类型
			taskSchedule.setScheduleType(TaskSchedule.SCHEDULE_TYPE_CRON);
		}
		return taskSchedule;
	}
	
	/**
	 * 
	 *方法摘要:构建Cron表达式
	 *@param  taskScheduleModel
	 *@return String
	 */
	public static String createCronExpression(TaskScheduleModel taskScheduleModel){
		StringBuffer cronExp = new StringBuffer("");
		
		//计划执行开始时间
		Date startTime = taskScheduleModel.getScheduleStartTime();
		
		if(null != startTime){
			//秒
			cronExp.append(DateUtil.getSecond(startTime)).append(" ");
			//分
			cronExp.append(DateUtil.getMinute(startTime)).append(" ");
			//小时
			cronExp.append(DateUtil.getHourOfDay(startTime)).append(" ");
			
			//按每天
			if(taskScheduleModel.getJobType().intValue() == 2){
				//每工作日
				if(taskScheduleModel.getEveryWeekDay().charValue() == '1'){
					//一个月中第几天
					cronExp.append("? ");
					//月份
					cronExp.append("* ");
					//星期[星期一到星期五]
					cronExp.append("2-6");
				} else{
					//一个月中第几天
					cronExp.append("*/").append(taskScheduleModel.getIntervalDay()).append(" ");
					//月份
					cronExp.append("* ");
					//星期
					cronExp.append("?");
				}
			}
			
			//按每周
			else if(taskScheduleModel.getJobType().intValue() == 4){
				//一个月中第几天
				cronExp.append("? ");
				//月份
				cronExp.append("* ");
				//周
				Integer[] weeks = taskScheduleModel.getDayOfWeeks();
				for(int i = 0; i < weeks.length; i++){
					if(i == 0){
						cronExp.append(weeks[i]);
					} else{
						cronExp.append(",").append(weeks[i]);
					}
				}
				
				//每隔?周
				if(taskScheduleModel.getIntervalWeek().intValue() > 0){
					cronExp.append("/").append(taskScheduleModel.getIntervalWeek());
				}
			}
			
			//按每月
			else if(taskScheduleModel.getJobType().intValue() == 8){
				//当前年份
				int currentYear = DateUtil.getYear(startTime);
				//当前月份
				int currentMonth = DateUtil.getMonth(startTime);
				//当前月份的最大天数
				int maxDayOfMonth = DateUtil.getMaxDayOfMonth(currentYear, currentMonth);
				
				//月份中具体某一天
				if (null != taskScheduleModel.getWhichDay())
				{
					//如果所选日期数大于当月最大天数,则默认表示当月最后一天
					if(taskScheduleModel.getWhichDay() > maxDayOfMonth){
						cronExp.append("L ");
					}
					else{
						cronExp.append(taskScheduleModel.getWhichDay()).append(" ");
					}
				} else{
					cronExp.append("? ");
				}
				
				//指定多个月份
				if(null != taskScheduleModel.getCountOfMonths()){
					for(int i = 0; i < taskScheduleModel.getCountOfMonths().length; i++){
						if(i == taskScheduleModel.getCountOfMonths().length - 1){
							cronExp.append(taskScheduleModel.getCountOfMonths()[i]);
						} else{
							cronExp.append(taskScheduleModel.getCountOfMonths()[i]).append(",");
						}
					}
					cronExp.append(" ");
				} else{
					cronExp.append("? ");
				}
				
				//当月第几周的周几
				if(null == taskScheduleModel.getIntervalDayOfWeek() || taskScheduleModel.getIntervalDayOfWeek() == 0){
					cronExp.append("? ");
				} else if(taskScheduleModel.getIntervalDayOfWeek() > 4){
					cronExp.append("L "); //超过4,表示当月最后一周
				} else{
					if(null == taskScheduleModel.getDayOfWeek()){
						cronExp.append("*#").append(taskScheduleModel.getIntervalDayOfWeek());
					} else{
						cronExp.append(taskScheduleModel.getDayOfWeek()).append("#").append(taskScheduleModel.getIntervalDayOfWeek());
					}
				}
			}
			
			//按间隔时间段
			else if(taskScheduleModel.getJobType().intValue() == 16){
				cronExp = new StringBuffer("");
				//秒
				if(null == taskScheduleModel.getIntervalCountOfSecond() || taskScheduleModel.getIntervalCountOfSecond().intValue() == 0){
					cronExp.append(DateUtil.getSecond(startTime)).append(" ");
				} else{
					cronExp.append(DateUtil.getSecond(startTime)).append("/");
					cronExp.append(taskScheduleModel.getIntervalCountOfSecond()).append(" ");
				}
				
				//分
				if(null == taskScheduleModel.getIntervalCountOfMinute() || taskScheduleModel.getIntervalCountOfMinute().intValue() == 0){
					cronExp.append(DateUtil.getMinute(startTime)).append(" ");
				} else{
					cronExp.append(DateUtil.getMinute(startTime)).append("/");
					cronExp.append(taskScheduleModel.getIntervalCountOfMinute()).append(" ");
				}
				
				//小时
				if(null == taskScheduleModel.getIntervalCountOfHours() || taskScheduleModel.getIntervalCountOfHours().intValue() == 0){
					cronExp.append(DateUtil.getHourOfDay(startTime)).append(" ");
				} else{
					cronExp.append(DateUtil.getHourOfDay(startTime)).append("/");
					cronExp.append(taskScheduleModel.getIntervalCountOfHours()).append(" ");
				}
				
				//日期
				if(null == taskScheduleModel.getIntervalCountOfDay() || taskScheduleModel.getIntervalCountOfDay().intValue() == 0){
					cronExp.append(DateUtil.getDayOfMonth(startTime)).append(" ");
				} else{
					cronExp.append(DateUtil.getDayOfMonth(startTime)).append("/");
					cronExp.append(taskScheduleModel.getIntervalCountOfDay()).append(" ");
				}
				
				//月
				if(null == taskScheduleModel.getIntervalCountOfMonth() || taskScheduleModel.getIntervalCountOfMonth().intValue() == 0){
					cronExp.append(DateUtil.getMonth(startTime)).append(" ");
				} else{
					cronExp.append(DateUtil.getMonth(startTime)).append("/");
					cronExp.append(taskScheduleModel.getIntervalCountOfMonth());
				}
			}
			
			// 按特定时间点
			else if(taskScheduleModel.getJobType().intValue() == 32){
				cronExp = new StringBuffer("* ");
				if(taskScheduleModel.getMinituesOfHour() != null && taskScheduleModel.getMinituesOfHour().length > 0) {
					int index = 0;
					for(int minitue : taskScheduleModel.getMinituesOfHour()) {
						if(index == taskScheduleModel.getMinituesOfHour().length - 1) {
							cronExp.append(minitue);
						} else {
							cronExp.append(minitue).append(",");
						}
						index++;
					}
				}
				if(taskScheduleModel.getHoursOfDay() != null && taskScheduleModel.getHoursOfDay().length > 0) {
					if(taskScheduleModel.getMinituesOfHour() != null && taskScheduleModel.getMinituesOfHour().length > 0) {
						cronExp.append(" ");
					}
					int index = 0;
					for(int hour : taskScheduleModel.getHoursOfDay()) {
						if(index == taskScheduleModel.getHoursOfDay().length - 1) {
							cronExp.append(hour);
						} else {
							cronExp.append(hour).append(",");
						}
						index++;
					}
				}
				cronExp.append(" * * *");
			}
		}
		return cronExp.toString();
	}
	
	/**
	 * 
	 *方法摘要:生成计划的详细描述
	 *@param  taskScheduleModel
	 *@return String
	 */
	public static String createDescription(TaskScheduleModel taskScheduleModel){
		StringBuffer description = new StringBuffer("");
		//简单任务
		if(taskScheduleModel.getJobType().intValue() == 1){
			description.append("简单任务,延迟(ms):");
			description.append(taskScheduleModel.getScheduleInterval());
			if(taskScheduleModel.getScheduleRepeatCount() <= 0) {
				description.append(",执行次数:无限制,永远循环执行下去。");
			} else {
				description.append(",重复执行次数:");
				description.append(taskScheduleModel.getScheduleRepeatCount());
			}
		}
		//系统启动时
		else if(taskScheduleModel.getJobType().intValue() == 64){
			description.append("系统启动时执行");
		}
		else{
			//计划执行开始时间
			Date startTime = taskScheduleModel.getScheduleStartTime();
			
			if(null != startTime){
				//按每天
				if(taskScheduleModel.getJobType().intValue() == 2){
					//每工作日
					if(taskScheduleModel.getEveryWeekDay().charValue() == '1'){
						description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
						description.append("起,于每个工作日").append(DateUtil.parseDate(startTime, "HH:mm:ss"));
						description.append("执行");
					} else{
						//每天
						if(taskScheduleModel.getIntervalDay().intValue() == 0){
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,于每天").append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						} 
						//每间隔?天
						else{
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,每隔").append(taskScheduleModel.getIntervalDay()).append("天,于");
							description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						}
					}
				}
				
				//按每周
				else if(taskScheduleModel.getJobType().intValue() == 4){
					if(startTime != null) {
						description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
						description.append("起");
					}
					//每隔?周
					if(taskScheduleModel.getIntervalWeek().intValue() > 0){
						description.append(",每隔").append(taskScheduleModel.getIntervalWeek()).append("周");
					}
					if(taskScheduleModel.getDayOfWeeks() != null && taskScheduleModel.getDayOfWeeks().length > 0) {
						description.append(",于每周的").append(DateUtil.getWeekString(taskScheduleModel.getDayOfWeeks())).append(" ");
					}
					if(startTime != null) {
						description.append(" ,").append(DateUtil.parseDate(startTime, "HH:mm:ss"));	
					}
					description.append("执行");
				}
				
				//按每月
				else if(taskScheduleModel.getJobType().intValue() == 8){
					description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
					
					//选择月份
					if(null != taskScheduleModel.getCountOfMonths() && taskScheduleModel.getCountOfMonths().length != 0){
						description.append("起,于");
						description.append(DateUtil.getMonthString(taskScheduleModel.getCountOfMonths()));
					} else{
						description.append("起,于每月的");
						if(null != taskScheduleModel.getWhichDay() && taskScheduleModel.getWhichDay().intValue() != 0){
							//当前年份
							int currentYear = DateUtil.getYear(startTime);
							//当前月份
							int currentMonth = DateUtil.getMonth(startTime);
							//当前月份的最大天数
							int maxDayOfMonth = DateUtil.getMaxDayOfMonth(currentYear, currentMonth);
							if(taskScheduleModel.getWhichDay() > maxDayOfMonth){
								description.append("最后一天");
							} else{
								description.append(taskScheduleModel.getWhichDay()).append("号");
							}
						} 
					}
					
					//第几个星期
					if(null != taskScheduleModel.getIntervalDayOfWeek() && taskScheduleModel.getIntervalDayOfWeek().intValue() != 0){
						if(taskScheduleModel.getIntervalDayOfWeek() > 4){
							description.append("最后一个星期");
						} else{
							description.append("第").append(taskScheduleModel.getIntervalDayOfWeek());
							description.append("个星期");
						}
					}
					
					//星期几
					if(null != taskScheduleModel.getDayOfWeek() && taskScheduleModel.getDayOfWeek().intValue() != 0){
						description.append("的").append(DateUtil.getWeekString(taskScheduleModel.getDayOfWeek()));
					} else{
						description.append("的每天");
					}
					description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
					description.append("执行");
				}
				
				//按每间隔时间段
				else if(taskScheduleModel.getJobType().intValue() == 16){
					//没填写间隔信息
					if((null == taskScheduleModel.getIntervalCountOfSecond() || taskScheduleModel.getIntervalCountOfSecond().intValue() == 0) &&
						(null == taskScheduleModel.getIntervalCountOfMinute() || taskScheduleModel.getIntervalCountOfMinute().intValue() == 0) &&
						(null == taskScheduleModel.getIntervalCountOfHours() || taskScheduleModel.getIntervalCountOfHours().intValue() == 0) &&
						(null == taskScheduleModel.getIntervalCountOfDay() || taskScheduleModel.getIntervalCountOfDay().intValue() == 0) &&
					    (null == taskScheduleModel.getIntervalCountOfMonth() || taskScheduleModel.getIntervalCountOfMonth().intValue() == 0) 
				    ){
						description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
						description.append("起,于");
						description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
						description.append("执行一次");
					} else{
						//秒
						if(null != taskScheduleModel.getIntervalCountOfSecond() && taskScheduleModel.getIntervalCountOfSecond().intValue() != 0){
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,每隔");
							description.append(taskScheduleModel.getIntervalCountOfSecond()).append("秒,于");
							description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						}
						//分
						if(null != taskScheduleModel.getIntervalCountOfMinute() && taskScheduleModel.getIntervalCountOfMinute().intValue() != 0){
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,每隔");
							description.append(taskScheduleModel.getIntervalCountOfMinute()).append("分钟,于");
							description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						}
						//小时
						if(null != taskScheduleModel.getIntervalCountOfHours() && taskScheduleModel.getIntervalCountOfHours().intValue() != 0){
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,每隔");
							description.append(taskScheduleModel.getIntervalCountOfHours()).append("小时,于");
							description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						}
						//日
						if(null != taskScheduleModel.getIntervalCountOfDay() && taskScheduleModel.getIntervalCountOfDay().intValue() != 0){
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,每隔");
							description.append(taskScheduleModel.getIntervalCountOfDay()).append("天,于");
							description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						}
						//月
						if(null != taskScheduleModel.getIntervalCountOfMonth() && taskScheduleModel.getIntervalCountOfMonth().intValue() != 0){
							description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd"));
							description.append("起,每隔");
							description.append(taskScheduleModel.getIntervalCountOfMonth()).append("个月,于");
							description.append(DateUtil.parseDate(startTime, "HH:mm:ss"));
							description.append("执行");
						}
					}
				}
				
				//按特定时间点
				else if(taskScheduleModel.getJobType().intValue() == 32){
					if(startTime != null) {
						description.append("从").append(DateUtil.parseDate(startTime, "yyyy-MM-dd HH:mm:ss"));
						description.append("起开始执行");
					}
					if(taskScheduleModel.getHoursOfDay() != null && taskScheduleModel.getHoursOfDay().length > 0) {
						int index = 0;
						description.append(",此后于每天的");
						for(int hour : taskScheduleModel.getHoursOfDay()) {
							if(index == taskScheduleModel.getHoursOfDay().length - 1) {
								description.append(hour + 1).append("点");
							} else {
								description.append(hour + 1).append("点,");
							}
							index++;
						}
					}
					if(taskScheduleModel.getMinituesOfHour() != null && taskScheduleModel.getMinituesOfHour().length > 0) {
						int index = 0;
						description.append(",");
						for(int minitue : taskScheduleModel.getMinituesOfHour()) {
							if(index == taskScheduleModel.getMinituesOfHour().length - 1) {
								description.append(minitue + 1).append("分");
							} else {
								description.append(minitue + 1).append("分,");
							}
							index++;
						}
					}
					description.append("定时执行");
				}
			}
		}
		return description.toString();
	}
}

 

        

5
3
分享到:
评论
2 楼 lw900925 2015-12-11  
1 楼 tk230 2015-12-11  
   

相关推荐

    Cron表达式解析类和时间相关操作工具类

    1、Cron表达式解析(比如Quartz的Cron表达式),计算下一次触发时间; 2、经常使用的时间相关的操作工具类,比如时间格式化,字符串、Date、localDate、LocalDateTime类型间的转换等

    Cron表达式生成器java版(需要jdk1.8)

    Quartz是一个强大的作业调度框架,它支持cron表达式,允许你创建Job类并定义触发时间,然后将Job与Trigger(触发器)关联,Trigger可以是一个cron表达式。Spring框架中的`@Scheduled`注解则提供了声明式的方法来定时...

    java cron表达式生成器

    Java根据时间戳生成cron表达式,可传入时间范围灵活实现Cron基于日历形式的任务调度时间点,简单简洁,互用性强,可以灵活改动。

    Java 写的Cron表达式解析

    通过使用Java Swing创建一个Cron表达式解析器,你可以提供一个直观的工具,帮助开发者更好地理解和使用这种强大的时间调度机制。同时,这也是对Java编程、GUI设计和时间管理知识的一个综合实践。

    Cron表达式解析 翻译为中英文.zip

    在Java中,我们可能需要一个工具类来处理Cron表达式,例如将其转换为Java的`ScheduledFuture`对象,或者验证一个给定的字符串是否符合Cron表达式的格式。这个类可能会包含如`parseCronExpression`、`...

    可直接使用-cron表达式前端生成工具.zip

    cron表达式是一种在Unix和其他类Unix系统中广泛使用的定时任务调度工具,用于配置计划任务的执行。这个压缩包“可直接使用-cron表达式前端生成工具.zip”提供了一个基于HTML、CSS和JavaScript实现的前端工具,它使得...

    Cron表达式生成工具

    Cron表达式是一种在Unix和类Unix系统中用于配置计划任务的强大工具。它允许用户设置时间规则,以便在特定的时间间隔执行任务。在Java开发中,Cron表达式也经常被用于Spring框架的定时任务调度。这个"Cron表达式生成...

    quartz定时任务cron表达式

    在Quartz中,我们可以使用`CronTrigger`类来创建基于cron表达式的触发器,并将其与作业(Job)关联,从而定义定时任务。`CronTrigger`的构造函数通常接受cron表达式字符串作为参数。 在实际应用中,理解并熟练掌握...

    Cron表达式生成器

    Cron表达式是Quartz中定义定时任务的关键组成部分,通过`CronTrigger`类,我们可以将Cron表达式与Job类关联,实现按预设时间执行的任务。 5. **在线生成软件**: 提供的压缩包可能包含一个在线Cron表达式生成器的...

    .net C# Cron表达式解析.

    在.NET开发环境中,C#是一种常用的编程语言,而Cron表达式则是一种强大的定时任务调度工具,常用于Linux系统中的计划任务。然而,在C#中,我们也可以通过库来解析和使用Cron表达式,这使得.NET开发者也能利用Cron的...

    应用再html、jsp上的自动生成Cron表达式

    在IT领域,尤其是在Web开发中,`Cron表达式`是一种强大的工具,用于安排周期性的任务执行。在HTML和JSP(JavaServer Pages)这样的前端和后端技术中,使用Cron表达式可以帮助开发者实现定时任务,比如定时发送邮件、...

    Cron表达式生成器.zip可反向解析

    Cron表达式是一种在Unix和类Unix系统中广泛使用的任务调度工具,用于设置定时任务。它基于特定的时间格式,允许用户定义精确到秒的任务执行计划。Cron表达式的语法复杂,但功能强大,可以实现从每日一次到每分钟一次...

    超好用quartz cron表达式html,可直接嵌入项目工程

    3. 验证生成的Cron表达式是否符合预期,可以使用Quartz提供的CronTrigger类进行测试和验证。 总之,这个超好用的Quartz Cron表达式HTML工具为Java开发者提供了一个强大的助手,使得管理Quartz定时任务变得更加直观...

    cron表达式前端生成工具,html实现,可直接用

    cron表达式是一种在Unix和其他类Unix系统中广泛使用的任务调度工具,用于安排周期性任务的执行。这个前端生成工具是基于HTML、CSS和JavaScript实现的,使得非开发人员也能轻松创建和理解复杂的cron表达式,方便地...

    cron表达式生成工具.rar

    这类工具通常会提供一个界面供用户输入时间参数,然后自动生成相应的cron表达式,降低了手动编写表达式的难度和出错概率。 此外,对于时间解析器,这是对cron表达式进行解析和验证的组件。在Java中,可以使用`org....

    react+ts+antd cron表达式组件

    在这个"react+ts+antd cron表达式组件"项目中,开发者整合了这些技术来实现一个特定功能——Cron表达式编辑器。 Cron表达式是一种用于配置定时任务的格式,常见于Unix和Linux系统。它由七个字段组成,从左到右分别...

    Java版-解释翻译Cron表达式(代码奉上)

    这可能是网上最完整的Cron表达式解析翻译方法。 Java版-解释翻译Cron表达式(代码奉上)。 此方法分为JavaScript版和Java版本,有需要的朋友请根据自己需要下载。 希望我写的方法有帮助到你,不足之处请多多指教。

    Quartz Cron表达式生成器(.NET) 附上源码

    `CronTrigger`类就是用来创建基于Cron表达式的触发器,你可以将生成的Cron表达式传递给`CronTrigger`的构造函数来创建触发器。 了解并使用Quartz Cron表达式生成器,可以帮助我们更高效地使用Quartz.NET进行定时...

    cron表达式生成器.net版

    3. **解析表达式**:生成器还可以将已有的cron表达式解析成人类可读的描述,帮助开发者理解表达式的具体含义。 4. **示例展示**:通常,生成器会提供一个日历视图或者时间轴,显示表达式对应的具体执行时间,以便...

Global site tag (gtag.js) - Google Analytics