public static Object[] weekly(Request[] requests, long start, long end) { GregorianCalendar dayStart = new GregorianCalendar(); dayStart.setTimeInMillis(start); dayStart.set(Calendar.HOUR_OF_DAY, 0); dayStart.set(Calendar.MINUTE, 0); dayStart.set(Calendar.SECOND, 0); dayStart.set(Calendar.MILLISECOND, 0); GregorianCalendar dayEnd = new GregorianCalendar(); dayEnd.setTimeInMillis(dayStart.getTimeInMillis() + 1000 * 60 * 60 * 24); Object[] results = new Object[(int) ((end - start) / ((long) 1000 * 60 * 60 * 24))]; for (int i = 0; dayStart.getTimeInMillis() < end; ++i) { long cur = 0; for (Request request : requests) { // seek open requests if (request.getRecievedAt() <= dayStart.getTimeInMillis() && request.getFinishedAt() > dayEnd.getTimeInMillis()) { cur++; } } Object row[] = new Object[3]; row[0] = new Long(dayStart.getTimeInMillis()); row[1] = new Long(dayEnd.getTimeInMillis()); row[2] = new Double(cur); results[i] = row; dayStart.setTimeInMillis(dayStart.getTimeInMillis() + 1000 * 60 * 60 * 24); dayEnd.setTimeInMillis(dayStart.getTimeInMillis() + 1000 * 60 * 60 * 24); } return results; }