【问题标题】:How to create multiple objects based on frequency and date如何根据频率和日期创建多个对象
【发布时间】:2012-11-03 00:33:29
【问题描述】:

出于某种原因,我无法弄清楚如何以干净的方式对其进行编码。 我有一个任务对象,这个对象有一个开始日期和结束日期。我想将此对象传递给将执行此任务的方法,根据频率将其克隆 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 日.

我知道我必须使用日历和循环来执行此操作,但我就是想不通

【问题讨论】:

    标签: java


    【解决方案1】:

    试试这个:

    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;
        }
    
    }
    

    【讨论】:

    • 谢谢。这看起来是个好主意。我会接受答案:)
    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多