skip to main | skip to sidebar

Java Programs and Examples with Output

Pages

▼
 
  • RSS
  • Twitter
Sunday, September 16, 2012

Repetitive date calculation

Posted by Admin at 10:25 AM – 0 comments
 
It generates a list of dates from the given start date and end date for every month for the given week number(1st/2nd/3rd/4th week of the month) and for the given day (Sun,Mon,Tue ...Sat)

For example
Start date = 1/1/2012
end date = 31/3/2012
frequency = 1 (1st/2nd/3rd/4th week of the month)
day = monday (Sunday to saturday)

Output is
---------
2/1/2012
6/2/2012
5/3/2012
private List<Object> generateRepEveryDates(Cx cx, RepetitiveGroupInfo repetitiveGroupInfo) throws AppException {

//RepetitiveGroupInfo is a bean and it has the attributes of Start date, end date, day, frequency,

  List<Object> repList = new ArrayList<Object>();


  Calendar calendar = Calendar.getInstance();

                                         //Get a start date
  Date repStartDate = repetitiveGroupInfo.getStartDate();
                                          
                                          //Set a end date
  Date repEndDate = repetitiveGroupInfo.getEndDate();

//Keep startdate as temp date to be constant
  Date tempDate = repStartDate;

//Its a day of week(Monday/Tuesday... Sunday)
  int repFreqDaysValue = repetitiveGroupInfo.getDay().getId().intValue();

//Frequency is 1st/2nd/3rd/4th week of the month
  int freqEveryValue = repetitiveGroupInfo.getFrequencyEvery().intValue();

  tempDate = calculateDate(repFreqDaysValue, tempDate);
//calculating first date of repetitive date. it must ne greater than start date
  tempDate = DateTool.add(tempDate, 7 * (freqEveryValue - 1), TimeUnit.DAY);

  if (Val.isAfterOrEqual(tempDate, repStartDate)) {

   repList.add(tempDate);

  }
//calculating from second date of repetitive date till the end date
  while (Val.isAfterOrEqual(repEndDate, tempDate)) {

   tempDate = DateTool.add(tempDate, 1, TimeUnit.MONTH);

   tempDate = calculateDate(repFreqDaysValue, tempDate);

   calendar.setTime(tempDate);

   int currentMonth = calendar.get(Calendar.MONTH);

   tempDate = DateTool.add(tempDate, 7 * (freqEveryValue - 1), TimeUnit.DAY);

   int afterAddedWeeks = calendar.get(Calendar.MONTH);

// checking whether last calsulated repetitive date is before the end date
   if (Val.isAfterOrEqual(repEndDate, tempDate)) {

    if (currentMonth == afterAddedWeeks) {

     repList.add(tempDate);

    }
   }

  }

  return repList;

 }

 private Date calculateDate(int repFreqDaysValue, Date currentDate) throws AppException {

  int index = 0;

  Date calcDate = currentDate;

  Calendar calendarObj = Calendar.getInstance();

  calendarObj.setTime(calcDate);

  calendarObj.set(Calendar.DATE, 1);

  calcDate = calendarObj.getTime();

  index = calendarObj.get(Calendar.DAY_OF_WEEK);

  index = index - 1;

  if (index > repFreqDaysValue) {

   index = (7 - index) + repFreqDaysValue;

   calcDate = DateTool.add(calcDate, index, TimeUnit.DAY);

  } else if (index < repFreqDaysValue) {

   index = repFreqDaysValue - index;

   calcDate = DateTool.add(calcDate, index, TimeUnit.DAY);
  }

  return calcDate;
 }

Leave a Reply

Newer Post Older Post
Subscribe to: Post Comments ( Atom )
  • Popular
  • Recent
  • Archives
Powered by Blogger.
 
 
 
© 2011 Java Programs and Examples with Output | Designs by Web2feel & Fab Themes

Bloggerized by DheTemplate.com - Main Blogger