@SuppressWarnings("deprecation") private void createAverages(Date start) { if (start.getMinutes() != 30 || start.getSeconds() != 0) { // we want to obtain estimates for full hours, i.e. 4:00 or 5:00 // by calculating averages for 3:30-4:29:59 and 4:30-5:29:59 throw new RuntimeException("Must start with hh:30:00"); } final int HOURS = 25; // we want to have vehicles for full 24 hours, e.g. 4am to 4am next day long startTime = start.getTime() / 1000; // in seconds long endTime = startTime + HOURS * 3600; // in seconds taxisOverTimeHourlyAverage = new double[HOURS]; int sum = 0; int hour = 0; int n = 0; for (long t = startTime; t < endTime; t++) { if (this.taxisOverTime.containsKey(new Date(t * 1000))) { sum += this.taxisOverTime.get(new Date(t * 1000)); // seconds -> milliseconds n++; } if (t % 3600 == 1799) { // t == hh:29:59 taxisOverTimeHourlyAverage[hour] += (double) sum / n; sum = 0; hour++; n = 0; } } for (int i = 0; i < HOURS; i++) { System.out.println(i + " : " + taxisOverTimeHourlyAverage[i]); } }