如何根据频率和日期创建多个对象

时间:2012-11-02 04:25:40

标签: java

出于某种原因,我无法弄清楚如何以干净的方式对其进行编码。 我有一个任务对象,这个对象有一个开始日期和结束日期。我想将此对象传递给将执行此任务的方法,根据频率将其克隆X次并将其开始日期设置为出现日期。

在幕后,通过例子可以更好地说明事情: 因此,假设我的任务开始日期为2012年6月1日,结束日期为2012年9月15日。频率设置为每月。我想将此任务传递给一个方法,该方法将为我创建一个包含4个任务的数组(6月,7月,8月,9月),其中的开始日期设置为相应月份的第一个

ArrayList<task> spawnTasks(Task task, Frequency Monthly){
    ArrayList<Task> arr  = new  ArrayList<Task>();

    Task TaskJune = task.clone();
    TaskJune.setStartDate("June, 1, 2012");       

    Task TaskJuly = task.clone();
    TaskJuly.setStartDate("July, 1, 2012");     

    Task TaskAug = task.clone();
    Taskaug.setStartDate("Aug, 1, 2012");     

    Task TaskSept = task.clone();
    TaskSept.setStartDate("Sept, 1, 2012");     

}

所以你可以看到我每个月创建一次任务,因为频率是每月一次(我可以每两周或每月一次),它发生在1日,因为那是开始日期,它从未超过9月,因为结束日期是9月15日

我知道我必须使用Calendar和循环才能完成它,但我无法弄清楚

1 个答案:

答案 0 :(得分:0)

试试这个:

private List<Task> spawn(Task original, Frequency frequency) {

    Date sd = original.getSd();
    Date ed = original.getEd();

    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(sd.getTime());

    List<Task> tasks = new ArrayList<Task>();
    for (; cal.getTimeInMillis() <= ed.getTime(); cal.add(frequency.getFrequency(), frequency.getMultiplier())) {
        Task task = original.clone();
        task.setSd(cal.getTime());

        tasks.add(task);
    }

    return tasks;
}

public enum Frequency {

    WEEKLY(Calendar.WEEK_OF_YEAR, 1),
    BIWEEKLY(Calendar.WEEK_OF_YEAR, 2),
    MONTHLY(Calendar.MONTH, 1),
    QUARTERLY(Calendar.MONTH, 3);

    private int frequency;
    private int multiplier;

    Frequency(int frequency, int multiplier) {
        this.frequency = frequency;
        this.multiplier = multiplier;
    }

    public int getFrequency() {
        return frequency;
    }

    public int getMultiplier() {
        return multiplier;
    }

}