是否有用于创建Cron Expression的Java代码?

我需要一个Java代码来根据用户输入创建一个cron表达式。 用户输入是时间,频率和执行次数。

只需添加评论说自己创建它。

下面是一个示例:提示用户输入值并将它们传递给下面的方法,Javadoc解释了哪个值允许的内容(取自http://en.wikipedia.org/wiki/Cron#Format )。

这是未经测试的,不会validation任何输入字符串,但我相信你可以做到这一点。

/** * Generate a CRON expression is a string comprising 6 or 7 fields separated by white space. * * @param seconds mandatory = yes. allowed values = {@code 0-59 * / , -} * @param minutes mandatory = yes. allowed values = {@code 0-59 * / , -} * @param hours mandatory = yes. allowed values = {@code 0-23 * / , -} * @param dayOfMonth mandatory = yes. allowed values = {@code 1-31 * / , - ? LW} * @param month mandatory = yes. allowed values = {@code 1-12 or JAN-DEC * / , -} * @param dayOfWeek mandatory = yes. allowed values = {@code 0-6 or SUN-SAT * / , - ? L #} * @param year mandatory = no. allowed values = {@code 1970–2099 * / , -} * @return a CRON Formatted String. */ private static String generateCronExpression(final String seconds, final String minutes, final String hours, final String dayOfMonth, final String month, final String dayOfWeek, final String year) { return String.format("%1$s %2$s %3$s %4$s %5$s %6$s %7$s", seconds, minutes, hours, dayOfMonth, month, dayOfWeek, year); } 

Cron格式信息取自此处: http : //en.wikipedia.org/wiki/Cron#Format

您可以根据需要更改以下实施。

 import java.io.Serializable; public class CronExpressionCreator implements Serializable { private static final long serialVersionUID = -1676663054009319677L; public static void main(String[] args) { CronExpressionCreator pCron = new CronExpressionCreator(); pCron.setTime("12:00 PM"); pCron.setMON(true); pCron.setStartDate("12-05-2011"); System.out.println(pCron.getCronExpression()); } public String getCronExpression() { String time = getTime(); String[] time1 = time.split("\\:"); String[] time2 = time1[1].split("\\ "); String hour = ""; if (time2[1].equalsIgnoreCase("PM")) { Integer hourInt = Integer.parseInt(time1[0]) + 12; if (hourInt == 24) { hourInt = 0; } hour = hourInt.toString(); } else { hour = time1[0]; } String minutes = time2[0]; String cronExp = ""; if (isRecurring()) { String daysString = ""; StringBuilder sb = new StringBuilder(800); boolean moreConditions = false; if (isSUN()) { sb.append("SUN"); moreConditions = true; } if (isMON()) { if (moreConditions) { sb.append(","); } sb.append("MON"); moreConditions = true; } if (isTUE()) { if (moreConditions) { sb.append(","); } sb.append("TUE"); moreConditions = true; } if (isWED()) { if (moreConditions) { sb.append(","); } sb.append("WED"); moreConditions = true; } if (isTHU()) { if (moreConditions) { sb.append(","); } sb.append("THU"); moreConditions = true; } if (isFRI()) { if (moreConditions) { sb.append(","); } sb.append("FRI"); moreConditions = true; } if (isSAT()) { if (moreConditions) { sb.append(","); } sb.append("SAT"); moreConditions = true; } daysString = sb.toString(); cronExp = "0 " + minutes + " " + hour + " ? * " + daysString; } else { String startDate = getStartDate(); String[] dateArray = startDate.split("\\-"); String day = dateArray[0]; if (day.charAt(0) == '0') { day = day.substring(1); } String month = dateArray[1]; if (month.charAt(0) == '0') { month = month.substring(1); } String year = dateArray[2]; cronExp = "0 " + minutes + " " + hour + " " + day + " " + month + " ? " + year; } return cronExp; } String startDate; String time; boolean recurring; boolean SUN; boolean MON; boolean TUE; boolean WED; boolean THU; boolean FRI; boolean SAT; /** * @return the startDate */ public String getStartDate() { return startDate; } /** * The date set should be of the format (MM-DD-YYYY for example 25-04-2011) * * @param startDate * the startDate to set */ public void setStartDate(String startDate) { this.startDate = startDate; } /** * @return the time */ public String getTime() { return time; } /** * The time set should be of the format (HH:MM AM/PM for example 12:15 PM) * * @param time * the time to set */ public void setTime(String time) { this.time = time; } public boolean isRecurring() { return recurring; } public void setRecurring(boolean recurring) { this.recurring = recurring; } public boolean isSUN() { return SUN; } public void setSUN(boolean sUN) { SUN = sUN; } public boolean isMON() { return MON; } /** * @param mON * the mON to set */ public void setMON(boolean mON) { MON = mON; } public boolean isTUE() { return TUE; } public void setTUE(boolean tUE) { TUE = tUE; } public boolean isWED() { return WED; } public void setWED(boolean wED) { WED = wED; } public boolean isTHU() { return THU; } public void setTHU(boolean tHU) { THU = tHU; } public boolean isFRI() { return FRI; } public void setFRI(boolean fRI) { FRI = fRI; } public boolean isSAT() { return SAT; } public void setSAT(boolean sAT) { SAT = sAT; } public int hashCode() { return this.getCronExpression().hashCode(); } public boolean equals(Object obj) { if (obj == null) { return false; } if (obj instanceof CronExpressionCreator) { if (((CronExpressionCreator) obj).getCronExpression() .equalsIgnoreCase(this.getCronExpression())) { return true; } } else { return false; } return false; } } 

上面的edwardsmatt提交的代码段与Quartz的CronExpression无法正常工作。 这是一个更正版本:

 /** * Generate a CRON expression is a string comprising 6 or 7 fields separated by white space. * * @param seconds mandatory = yes. allowed values = {@code 0-59 * / , -} * @param minutes mandatory = yes. allowed values = {@code 0-59 * / , -} * @param hours mandatory = yes. allowed values = {@code 0-23 * / , -} * @param dayOfMonth mandatory = yes. allowed values = {@code 1-31 * / , - ? LW} * @param month mandatory = yes. allowed values = {@code 1-12 or JAN-DEC * / , -} * @param dayOfWeek mandatory = yes. allowed values = {@code 0-6 or SUN-SAT * / , - ? L #} * @param year mandatory = no. allowed values = {@code 1970–2099 * / , -} * @return a CRON Formatted String. */ private static String generateCronExpression(final String seconds, final String minutes, final String hours, final String dayOfMonth, final String month, final String dayOfWeek, final String year) { return String.format("%1$s %2$s %3$s %4$s %5$s %6$s %7$s", seconds, minutes, hours, dayOfMonth, month, dayOfWeek, year); } 

我认为你可以使用cron-utils ,它带来了一个CronBuilder类并允许导出为多种格式。 该function从4.0.0版开始提供。

README的一个例子:

 //Create a cron expression. CronMigrator will ensure you remain cron provider agnostic import static com.cronutils.model.field.expression.FieldExpressionFactory.*; Cron cron = CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)) .withYear(always()) .withDoM(between(1, 3)) .withMonth(always()) .withDoW(questionMark()) .withHour(always()) .withMinute(always()) .withSecond(on(0)) .instance(); //Obtain the string expression String cronAsString = cron.asString();//0 * * 1-3 * ? * //Migrate to Unix format cron = CronMapper.fromQuartzToUnix().map(cron); cronAsString = cron.asString();//* * 1-3 * *