1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
static public long calcul(Date eventDebut, Date eventFin, int plageDebut, int plageFin) {
GregorianCalendar cal1 = new GregorianCalendar(); // debut plage
GregorianCalendar cal2 = new GregorianCalendar(); // fin plage
long intersection = 0;
// On définit la plage horaire qui commence avant debut
cal1.setTime(eventDebut);
cal1.set(Calendar.HOUR_OF_DAY, plageDebut);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
if (cal1.getTime().after(eventDebut)) {
cal1.add(Calendar.DATE, -1);
}
cal2.setTime(cal1.getTime());
cal2.set(Calendar.HOUR_OF_DAY, plageFin);
if (cal2.getTime().before(cal1.getTime())) {
cal2.add(Calendar.DATE, 1);
}
// Tant que la plage horaire n'est pas postérieure à fin :
while (cal1.getTime().before(eventFin)) {
intersection += Math.max(Math.min(eventFin.getTime(), cal2.getTimeInMillis()) - Math.max(eventDebut.getTime(), cal1.getTimeInMillis()), 0);
// On décale la plage de 24h
cal1.add(Calendar.DATE, 1);
cal2.add(Calendar.DATE, 1);
}
return intersection;
} |
Partager