Additionner des jours de la semaine
L'exemple est construit pour connaitre le nombre de lundi. La technique reste la même pour mardi ou mercredi, il suffit de remplacer les constantes JAVA correspondante. Par exemple si l'on veut additionner le nombre de mardi, utilisez la constante Calendar.TUESDAY;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Nombre de jour de la semaine entre deux dates
* http://www.fobec.com/java/986/nombre-jour-semaine-entre-dates.html
* @author Axel 2010
*/
public class DayNumCounter {
/**
*
* @param date_first date la plus ancienne
* @param date_last date la plus récente
* @param dayNum N° du jour, cf constante JAVA
* @return
*/
public static int DayNumBetween(Date date_first, Date date_last, int dayNum) {
Calendar calendar_first = Calendar.getInstance();
calendar_first.setTime(date_first);
Calendar calendar_last = Calendar.getInstance();
calendar_last.setTime(date_last);
int found = 0;
while (calendar_first.before(calendar_last)) {
if (calendar_first.get(Calendar.DAY_OF_WEEK) == dayNum) {
found++;
calendar_first.add(Calendar.DATE, 7);
} else {
calendar_first.add(Calendar.DATE, 1);
}
}
return found;
}
/**
* Exemple
* @param args
*/
public static void main(String args[]) {
Calendar yearAgo = Calendar.getInstance();
yearAgo.add(Calendar.MONTH, -12);
Calendar today = Calendar.getInstance();
int found=DayNumBetween(yearAgo.getTime(), today.getTime(), Calendar.THURSDAY);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
System.out.println("Nombre de lundi entre aujourd'hui et le "+sdf.format(yearAgo.getTime())+" est de :" + found);
}
}
La class DayNumCounter ne fait aucun calcul complexe sur les dates. En fait, la technique est toute simple: le curseur se place sur la première date, puis l'algo cherche le première occucurence du jour de la semaine. Dès que le jour est trouvé, la boucle est incrémentée de 7 jours à chaque fois.