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

C# Discussion :

[JoursOuvrés] Calculer le nombre de jours ouvrés entre 2 dates


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut [JoursOuvrés] Calculer le nombre de jours ouvrés entre 2 dates
    Bonjour,


    Je souhaiterais calculer le nombre total de jours ouvrés entre 2 dates.

    Bon la méthode simple (que je vais faire je crois)
    C'est d'ignorer le samedi et le dimanche.

    La méthode propre en une ligne:
    Une fonction culturelle prévu par .Net qui gère les jours fériés & Co...

    Merci,
    Bien à vous

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    Bon ca vous semble cohérent ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private int DaysIgnoreWeekends(DateTime dtst, DateTime dtend)
    {
           TimeSpan days = dtend.Subtract(dtst);
           int count = 0;
           for (int a = 0; a < days.Days + 1; a++)
           {
               if (dtst.DayOfWeek != DayOfWeek.Saturday && dtst.DayOfWeek != DayOfWeek.Sunday)
                   count++;
               dtst = dtst.AddDays(1.0);
           }
           return count;
    }
    Si y a mieux, plus court, plus propre,
    je suis preneur !

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    ton problème est avec deux dates très éloignées, la boucle peut être forte consommatrice.

    fait un test avec celle-ci:
    1- pour voir si t'as les mêmes résultats
    2- pour laquelle est plus rapide

    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
    int Weekdays(DateTime dtmStart, DateTime dtmEnd)
        {
            // This function includes the start and end date in the count if they fall on a weekday
            int dowStart = ((int)dtmStart.DayOfWeek == 0 ? 7 : (int)dtmStart.DayOfWeek);
            int dowEnd = ((int)dtmEnd.DayOfWeek == 0 ? 7 : (int)dtmEnd.DayOfWeek);
            TimeSpan tSpan = dtmEnd - dtmStart;
            if (dowStart <= dowEnd)
            {
                return (((tSpan.Days / 7) * 5) + Math.Max((Math.Min((dowEnd + 1), 6) - dowStart), 0));
            }
            else
            {
                return (((tSpan.Days / 7) * 5) + Math.Min((dowEnd + 6) - Math.Min(dowStart, 6), 5));
            }
        }

    ensuite, il ne faut pas oublier les jours fériés

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    hum,
    J'ai plus confiance en mon code...

    Visiblement y a des pti soucis avec ta fonction (19/03/2010, 02/04/2010) à l'air d'annoncer une différence de 6 jours :/

    Je prefere privilegier la lisibilié du code, que les performances

    Mais bien essayé merci,
    Héhé

    Les jours fériés c'est un enfer, si c'est pas pris en compte par la framework, je laisse béton

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    c'est pas mon code, je l'ai trouvé sur un forum. après je le trouve pas moins lisible, c'est juste une formule mathématique, mais elle est p-e erronée effectivement, la tienne est plus facilement testable.

    quant aux jours fériés, ca se gère assez facilement en stockant à part une liste de jour, et en vérifiant simplement si c'est entre les deux dates && si c'est un weekday, et dans ce cas, tu retires 1.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    Louis-Guillaume Morand
    C'est cool d'avoir proposé ton code, comme ca si quelqu un tombe ici, il aura le choix !

    En effet, c'est faisable de gérer les jours feriés, mais je vais pas le faire dans mon cas Osef...

    A+

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

Discussions similaires

  1. [Vxi3] Calcul nombre de jours ouvrés entre 2 dates
    Par Wonsul dans le forum Webi
    Réponses: 2
    Dernier message: 22/04/2013, 16h15
  2. [Dates] Calcul du nombre de jours ouvrés entre 2 dates
    Par Pokerstar dans le forum Langage
    Réponses: 6
    Dernier message: 16/07/2011, 16h02
  3. [Dates] calculer le nombre de jour ouvrable entre 2 dates
    Par pimpmyride dans le forum Langage
    Réponses: 1
    Dernier message: 20/11/2006, 17h10
  4. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  5. Nombre de jours ouvrés entre 2 dates
    Par motlerang dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/12/2005, 13h25

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