2010-08-19 7 views
1

양식의 사용자 입력을 기반으로 cron 표현식을 작성해야합니다. 그래서 나는 주파수를 선택할 날짜 선택기와 선택 상자가 있습니다. 이렇게 쉽게 cron 표현식을 만들 수는 있지만 휠을 재발 명하고있는 것처럼 느껴집니다. 이 일을하기에 적합한 수업이 있습니까?날짜를 사용하여 cron 표현식을 구성하기위한 Java 클래스가 있습니까?

public String cron(String frequency, Calendar nextRunTime); 
+0

난 당신이 제안 무엇을합니까 하나가 생각하지 않는다, (날짜를 검색하기 위해 크론 구문 분석)의 주위에 그것을 다른 방법을 알고 모든 솔루션 –

답변

0

같은 방법으로 뭔가 내가 석영의 크론 기능이 당신을 위해 이것을 제공 할 수 있다고 생각하지만, 당신은 그것을 작동하게하는 몇 가지 프로그래밍을 할 필요가 없습니다. (http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html)

귀하의 질문을 정확하게 이해하는 경우입니다.

+0

예,를 만들기 위해 노력하고 있어요 cron 표현식이지만, 날짜를 기반으로이 작업을 수행 한 Java 클래스가 있는지 궁금해했습니다. 따라서 CronExpression은 다음과 같은 방법을 사용합니다 : void buildExpression (String expression); 나는 래퍼 또는 도우미 같은 것이 있습니다. void buildExpression (string frequency, Calendar nextRunTime); 불행히도 이것이 존재하지 않는 것처럼 보일 수 있으므로 직접 작성해야합니다. 그냥 나에게 상당히 일반적인 일처럼 보였다. –

+0

그럼 왜 대답을 수락 했습니까? –

+0

그냥 정돈 해 - 그 대답은 기본적으로 "상자 밖에서 이것을하는 클래스가 없다"고 말합니다. –

0

Quartz Scheduler로 작업 할 클래스를 만들었습니다.

  String startDateStr = "2013-10-19 09:00:00.0"; 
      String endDateStr = "2013-10-26 23:00:00.0"; 

      Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(startDateStr); 
      Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateStr); 

      CronCalendarHelper_ calHelper = new CronCalendarHelper_(startDate, endDate); 
      String cron = calHelper.getSecondsDuration() + " " + calHelper.getMinsDuration() + " " + calHelper.getHoursDuration() + " " 
        + calHelper.getDaysOfMonthDuration() + " " + calHelper.getMonthsDuration() + " " + calHelper.getDaysOfWeekDuration() + " " 
        + calHelper.getYearsDuration(); 
      System.out.println("Injecting Cron Expression " + cron); 

참고 나는 또한 현재보다는 ID CronExpressionHelper의 이름을 지정하고해야

참조하십시오

package com.az.ws.client.utility; 

import java.util.Calendar; 
import java.util.Date; 


/** 
* @author AZ 
* 
*/ 

public final class CronCalendarHelper_ { 

    private final Date mStartDate; 
    private final Calendar mStartCal; 
    private final Date mEndDate; 
    private final Calendar mEndCal; 
    private final String mSecondsDuration = "0"; 
    private final String mMinsDuration = "0/30"; 
    private final String mDaysOfWeekDuration = "?"; 

    private String mHoursDuration; 
    private String mDaysOfMonthDuration; 
    private String mMonthsDuration; 
    private String mYearsDuration; 

    public CronCalendarHelper_(Date pStartDate, Date pEndDate) { 
     this.mStartDate = pStartDate; 
     mStartCal = Calendar.getInstance(); 

     this.mEndDate = pEndDate; 
     mEndCal = Calendar.getInstance(); 

     this.init(); 
    } 

    private void init() { 
     mStartCal.setTime(mStartDate); 
     mEndCal.setTime(mEndDate); 

     String h1 = String.valueOf(mStartCal.get(Calendar.HOUR_OF_DAY)); 
     String h2 = String.valueOf(mEndCal.get(Calendar.HOUR_OF_DAY)); 

     this.mHoursDuration = h1 + "-" + h2; 

     String d1 = String.valueOf(mStartCal.get(Calendar.DAY_OF_MONTH)); 
     String d2 = String.valueOf(mEndCal.get(Calendar.DAY_OF_MONTH)); 

     this.mDaysOfMonthDuration = d1 + "-" + d2; 

     // First month is January which is 0, inconsistent Java Date API 
     String m1 = new java.text.SimpleDateFormat("MM").format(mEndCal.getTime()); 
     String m2 = new java.text.SimpleDateFormat("MM").format(mStartCal.getTime()); 

     if (Integer.valueOf(m2) - Integer.valueOf(m1) > 0) { 
      this.mMonthsDuration = m1 + "-" + m2; 
     } else { 
      this.mMonthsDuration = m1; 
     } 

     if (mEndCal.get(Calendar.YEAR) - mStartCal.get(Calendar.YEAR) > 0) { 
      String y1 = String.valueOf(mStartCal.get(Calendar.YEAR)); 
      String y2 = String.valueOf(mEndCal.get(Calendar.YEAR)); 

      this.mYearsDuration = y1 + "-" + y2; 
     } else { 
      this.mYearsDuration = String.valueOf(mStartCal.get(Calendar.YEAR)); 
     } 

    } 

    public Date getDate() { 
     return mStartDate; 
    } 

    public String getSecondsDuration() { 
     return mSecondsDuration; 
    } 

    public String getMinsDuration() { 
     return mMinsDuration; 
    } 

    public String getDaysOfWeekDuration() { 
     return mDaysOfWeekDuration; 
    } 

    public String getHoursDuration() { 
     return mHoursDuration; 
    } 

    public String getDaysOfMonthDuration() { 
     return mDaysOfMonthDuration; 
    } 

    public String getMonthsDuration() { 
     return mMonthsDuration; 
    } 

    public String getYearsDuration() { 
     return mYearsDuration; 
    } 
} 

사용법은 아래의 클래스와 또한 사용법을 찾아주세요 기본값은 그 (것)들을위한 getter/setter를 쓸 수도 있지만 좋은 출발점입니다.

블로그 : http://www.apachejava.blogspot.com

관련 문제