code: private static Calendar getEndOfMonth(Calendar calendar) {
  
          // Copy given calender only up to given month
          Calendar endOfMonth = Calendar.getInstance();
          endOfMonth.clear();
          endOfMonth.set(Calendar.YEAR,  calendar.get(Calendar.YEAR));
          endOfMonth.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
  
          // Advance to the last millisecond of the given month
          endOfMonth.add(Calendar.MONTH,        1);
          endOfMonth.add(Calendar.MILLISECOND, -1);
  
          return endOfMonth;
  
      }
docs: Returns a new calendar representing the last millisecond of the same
  month and year as <code>calendar</code>.
  
  @param calendar
  The calendar defining the month and year whose end (last millisecond)
  is to be returned.
  
  @return
  A new calendar representing the last millisecond of the same month
  and year as <code>calendar</code>.