Publié le 02/09/2010
Auteur axel
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Nombre de jour de la semaine entre 2 dates

Nous avons été confronté à ce petit casse-tete: combien y a t'il de lundi sur une année ? Au dela de ce cas particulier, quelle algorithme utiliser pour connaitre le nombre de jour de la semaine entre 2 dates. Effectivement, de déterminer le nombre de semaine ne réponds pas à la question, puisque rarement les deux dates à comparer sont des semaines pleines, à savoir du dimanche au samedi.

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.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
02/09/2010
Visualisation
vu 2458 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Roger HENRI dans CMS

Je ne suis pas sûr que cette procédure marche toujours parfaitement à cause du mot
"selstart" qui, chez moi au moins, paraît être capricieux.

Quand je veux lire sa valeu...

Publié par Christof dans CMS

Je pense qu'il y a un problème au niveau de l'affectation du longint "Color" dans la
variable de type byte "r". A mon avis, cela risque de provoquer une erreur de
vérifi...

Publié par Etiazam dans php5

Si je peux me permettre, il manque l'incrementation dans les deux boucles, telles qu'elles sont presentees elles font tourner le navigateur en rond, il faut donc ajouter
for ($x=0;$x<50;$x...

Publié par medfayz dans java

hi everybody thanks for the code , and please can any one help me to fix that exception.
javax.media.NoPlayerException: Cannot find a Player for :vfw:0

thanks

Publié par fffffff dans php5

comment est-ce que les joueurs s'inscrivent, utilisez-vous PHP ?