Java 如何基于频率和日期创建多个对象
出于某种原因,我无法想出如何以干净的方式编写代码。 我有一个任务对象,这个对象有开始日期和结束日期。我想将此对象传递给将执行此任务的方法,根据频率将其克隆X次,并将其开始日期设置为发生日期 当然,通过例子可以更好地说明问题: 假设我的任务开始日期为2012年6月1日,结束日期为2012年9月15日。频率设置为每月一次。我希望将此任务传递给一个方法,该方法将为我创建一个包含4个任务(6月、7月、8月、9月)的数组,其中开始日期设置为相应月份的第一个Java 如何基于频率和日期创建多个对象,java,Java,出于某种原因,我无法想出如何以干净的方式编写代码。 我有一个任务对象,这个对象有开始日期和结束日期。我想将此对象传递给将执行此任务的方法,根据频率将其克隆X次,并将其开始日期设置为发生日期 当然,通过例子可以更好地说明问题: 假设我的任务开始日期为2012年6月1日,结束日期为2012年9月15日。频率设置为每月一次。我希望将此任务传递给一个方法,该方法将为我创建一个包含4个任务(6月、7月、8月、9月)的数组,其中开始日期设置为相应月份的第一个 ArrayList<task> sp
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");
}
ArrayList任务(任务任务,频率每月){
ArrayList arr=新的ArrayList();
Task TaskJune=Task.clone();
任务开始日期(2012年6月1日);
Task TaskJuly=Task.clone();
任务开始日期(2012年7月1日);
Task taskagug=Task.clone();
任务8月开始日期(“2012年8月1日”);
Task TaskSept=Task.clone();
任务开始日期(2012年9月1日);
}
如你所见,我每月创建一次任务,因为频率是每月一次(我可以每两周或每月一次),任务发生在1号,因为这是开始日期,它从未超过9月,因为结束日期是9月15日
我知道我必须使用日历和循环来完成这项工作,但我就是想不出来试试这个:
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;
}
}
私有列表生成(任务原始,频率){
Date sd=原始的.getSd();
日期ed=原始的.getEd();
Calendar cal=Calendar.getInstance();
cal.setTimeInMillis(sd.getTime());
列表任务=新建ArrayList();
对于(;cal.getTimeInMillis(),谢谢。这看起来是个好主意。我会接受答案:)