我需要一個Java代碼來創建一個基於用戶輸入的cron表達式。 用戶輸入是時間,頻率和執行次數。有沒有用於創建Cron Expression的Java代碼?
回答
只需從自己創建的註釋中添加即可。
下面是一個示例:提示用戶輸入值並將它們傳遞給以下方法,Javadoc解釋了哪些值(取自http://en.wikipedia.org/wiki/Cron#Format)的允許值。
這是未經測試,並沒有驗證任何輸入字符串,但我相信你可以做到這一點。
/**
* 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 */, - ? L W}
* @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
謝謝愛德華茲I會嘗試這個。 – Priya 2011-05-12 08:48:34
感謝您的方法,試圖在當前日期時間使用此方法生成cron表達式,得到以下錯誤:線程「AWT-EventQueue-0」中的異常java.lang.RuntimeException:CronExpression'? 50 11? 8?'是無效的,。 (CronScheduleBuilder.java:105) – user2176576 2014-09-15 06:21:15
這對Quartz的CronExpression至少是行不通的。提交修改。 – 2015-04-14 13:15:47
您可以更改執行以下按您的需求。
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;
}
}
The snippet submitted by edwardsmatt above在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 */, - ? L W}
* @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類,並允許導出爲多種格式。該功能從版本4.0.0起可用。
從自述一個例子:
//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 * *
- 1. Cron沒有創建日誌
- 2. 有沒有用於計算MACD指標值的Java代碼?
- 3. 從XSD創建XML文件的Java代碼沒有任何POJO
- 4. 代碼第一次沒有創建表
- 5. SQLI PHP代碼中沒有創建表
- 6. 有沒有人曾經在Expression Engine上創建過購物車?
- 7. 有沒有辦法使用Freemind和Java代碼自動創建思維導圖?
- 8. Java代碼沒有運行
- 9. 將Doxygen用於現有的java代碼
- 10. 有沒有關於創建NT4的書?
- 11. 使用Expression Blend後面的代碼創建自定義按鈕
- 12. 有沒有一種簡單的方法來創建代碼TextBox?
- 13. Expression Blend 4有沒有書可用?
- 14. Java servlet代碼沒有被調用?
- 15. 用於從現有代碼創建大型java類圖的Eclipse插件
- 16. 如何創建適用於所有瀏覽器的css代碼?
- 17. 有沒有辦法創建一個代碼爲
- 18. 沒有用於Ubuntu的Java?
- 19. 使用Java代碼創建補救使用Java代碼
- 20. Cpanel Cron Job沒有完全運行我的PHP代碼
- 21. Linux,檢查目前沒有運行cron作業的代碼?
- 22. 沒有服務器代碼的iOS cron作業
- 23. 如何使用代碼創建PickerView(沒有xib)
- 24. Java創建沒有SQL內容的PreparedStatement
- 25. 創建沒有eclipse的Java項目?
- 26. Java - 創建沒有TimeZone的日曆
- 27. 有沒有人有'hello world'Debian軟件包,用於D源代碼?
- 28. 有沒有辦法判斷java中是否有代碼沒有被使用?
- 29. 有沒有用於Java的在線IDE?
- 30. 關於HTML代碼創建Javascript代碼
cron表達式格式看起來很簡單。我懷疑Java本身是否支持Unix功能的代碼。我也不會建議導入任何庫,只是爲了獲得或多或少是一行代碼的代碼(如果您真的需要創建表達式...)。爲什麼不看一下格式,並簡單地創建代碼來輸出這種格式的字符串? http://en.wikipedia.org/wiki/Cron#Format – 2011-05-12 05:56:00
你可以從[這個實現]有想法(http://www.techdive.in/java/java-create-cron-expression) – 2011-05-12 06:07:12