IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Nombre de jours ouvrés entre deux dates


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut Nombre de jours ouvrés entre deux dates
    Bonjour,

    je souhaite développez une petite fonction permettant de calculer le nombre de jours ouvrés entre deux dates.

    Le code actuel calcule uniquement le nombre de jours total :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Calendar calendar1 = new GregorianCalendar();
    calendar1.set(Calendar.YEAR, 2006);
    calendar1.set(Calendar.MONTH, 4);
    calendar1.set(Calendar.DAY_OF_MONTH, 1);
    Date date1 = calendar1.getTime();
     
    //  2006-08-15
    Calendar calendar2 = new GregorianCalendar();
    calendar2.set(Calendar.YEAR, 2006);
    calendar2.set(Calendar.MONTH, 8);
    calendar2.set(Calendar.DAY_OF_MONTH, 15);
    Date date2 = calendar2.getTime();
     
    // Différence
    long diff = Math.abs(date2.getTime() - date1.getTime());
    long numberOfDay = (long)diff/CONST_DURATION_OF_DAY;
    System.err.println("Le nombre de jour est : " + numberOfDay);
    Avez vous une idée ?
    Merci

  2. #2
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Tu as 5/7 jours ouvrés, après pour être exact au jour près il faut savoir de quel jour tu pars.
    Je dirai comme algo:
    1) compter le nombre de jours total "x"
    2) compter le nombre de semaines absolue "y" = x/7 (partie entière)
    3) compter le nombre de jours potentiels "z" = x%7
    4) déterminer "à la main" si ces jours tombent sur un samedi ou un dimanche (prendre les jours à une des deux extrémités de la fourchette, c'est pareil, c'est à dire regarder les z premiers ou z derniers jours de ta fourchette)

    => le nombre de jours ouvrés est 5*y+résultat de l'étape 4

    Si tu veux inclure les jours fériés il faut inclure des cas particuliers car ça c'est variable (dejà ça dépend des pays, et en plus ça dépend des années)
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut
    Merci pour ta réponse,

    cependant j'ai oublier de signaler que les dates seront très courtes (5 jours maxi).
    ce que j'aimerais si c'est possible c'est d'incrémenter au fur et à mesure la date et de vérifier si il s'agit d'un jours ouvré ou pas.

    Ex :

    du 15 au 21 juin 2009
    15 = lundi on incrémente le compteur
    16 = mardi on incrémente le compteur
    17 = mercredi = on incrémente le compteur
    18 = jeudi on incrémente un compteur
    19 = vendredi on incrémente le compteur
    20 = samedi on incrémente PAS
    21 = dimanche on incrémente PAS

    Est ce possible ?

    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    Bonjour,

    Il faudrait peut être utiliser la classe Calendar/GregorianCalendar pour boucler sur les jours et ne pas compter les jours lorsque ce sont des samedi ou dimanche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY &&
       calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) {
    ....
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut
    et comment pourront on incrémenter la date ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Points : 480
    Points
    480
    Par défaut
    En calculant le nombre de jours entre les deux dates.
    Puis créer deux calendar à partir des dates.
    Puis en bouclant sur le nombre de jours.
    Dans la boucle regarder si le jour en cours est un samedi ou dimanche,
    puis incrémenter le jour de 1 en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cal.add(Calendar.DAY_OF_MONTH, 1);

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut
    Merci pour toutes tes réponses !!

    Voila le code, j'espère qu'il n'y a pas d'erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
            int compteur = 0;
            Calendar calendar1 = new GregorianCalendar();
            calendar1.set(Calendar.YEAR, 2009);
            calendar1.set(Calendar.MONTH, 5);
            calendar1.set(Calendar.DAY_OF_MONTH, 15);
            Date date1 = calendar1.getTime();
     
            //  2006-08-15
            Calendar calendar2 = new GregorianCalendar();
            calendar2.set(Calendar.YEAR, 2009);
            calendar2.set(Calendar.MONTH, 5);
            calendar2.set(Calendar.DAY_OF_MONTH, 28);
            Date date2 = calendar2.getTime();
     
            // Différence
            long diff = Math.abs(date2.getTime() - date1.getTime());
            long numberOfDay = (long)diff/86400000;
            System.out.println("Le nombre de jour est : " + numberOfDay);
     
             for(int i=0;i<=numberOfDay;i++){
                 if(calendar1.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY && calendar1.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY)
                    compteur++;
                 calendar1.add(Calendar.DAY_OF_MONTH, 1);
             }
            System.out.println("Le nombre de jour ouvrés est : " + compteur);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre de jours ouvrés entre deux dates
    Par foxrole dans le forum SAS Base
    Réponses: 3
    Dernier message: 10/07/2013, 16h56
  2. [Dates] Nombre de jours ouvrés entre deux date
    Par meufeu dans le forum Langage
    Réponses: 1
    Dernier message: 31/01/2007, 17h50
  3. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  4. [Dates] Nombre jours ouvrés entre deux dates
    Par Yali dans le forum Langage
    Réponses: 4
    Dernier message: 28/12/2005, 12h05
  5. Nbre de jours ouvrés entre deux date
    Par lito74 dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2005, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo