Aidez moi SVP Date en C Sharp

Signaler
Messages postés
6
Date d'inscription
lundi 6 avril 2015
Statut
Membre
Dernière intervention
25 avril 2015
-
Messages postés
14587
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 août 2020
-
Bonjour,
j'ai un pb si vous pouvez m'aider

je voudrais faire addition d'une date et un nombre de jours sans prendre en considération le jours de vendredi

exemple 10/04/2015+10 JOURS =une date sans prise en compte le vendredi.


merci d'avance mes PROF

1 réponse

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
28
Bonjour

tu testes, pour chaque jour à ajouter, si c'est un vendredi tu ne l'ajoutes pas.

ex

// Défini la date de base
DateTime Date = new DateTime(2015, 04, 10);
// nombre de jours à ajouter
int DayToAdd = 10;

// nombre de jours à ajouter, sans les vendredi
int DayCount = 0;
// test pour chaque jours à ajouter
for (int i = 1; i <= DayToAdd; i++)
  if (Date.AddDays(i).DayOfWeek != DayOfWeek.Friday)
    DayCount++;

DateTime newDate = Date.AddDays(DayCount);



Messages postés
14587
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 août 2020
426
Bonjour, la question étant assez imprécise, on pourrait l'interpréter dans l'autre sens:
Vendredi jour non ouvré, donc ne compte pas un jour ouvrable, donc il faut ajouter 11 jours ou 12 selon le jour de départ...

Si au lieu d'écrire
10/04/2015+10 JOURS =une date sans prise en compte le vendredi.

il avait écrit 10/04/2015+10 JOURS = 19/04/2015 (ton interprétation) ou 10/04/2015+10 JOURS =21/04/2015 (deuxième hypothèse) on aurait été sûr...
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
28 >
Messages postés
14587
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 août 2020

Tu as raison Whismeril

Dans ce cas il faut ajouter 1J de plus pour les vendredi
if (Date.AddDays(i).DayOfWeek != DayOfWeek.Friday)
    DayCount++;
  else
    DayCount +=2;
Messages postés
14587
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 août 2020
426
On peut s'affranchir du nombre de semaines entière afin de réduite les itérations au 7 maximum:
        private void TestMesetif(DateTime DateDepart, int nbrJours)
        {
            int nbrSemaineEntiere = nbrJours / 7;

            //hypothèse 1
            int semaineAajouter = 6 * nbrSemaineEntiere;
            int joursAajouter = 0;
            for (int i = nbrSemaineEntiere * 7+1; i < nbrJours+1; i++)
                if (DateDepart.AddDays(i).DayOfWeek != DayOfWeek.Friday) joursAajouter++;

            DateTime resultatHypothese1 = DateDepart.AddDays(semaineAajouter + joursAajouter);


            //hypothèse 2
            semaineAajouter = 8 * nbrSemaineEntiere;
            joursAajouter = 0;
            for (int i = nbrSemaineEntiere * 7 + 1; i < nbrJours + 1; i++)
                if (DateDepart.AddDays(i).DayOfWeek != DayOfWeek.Friday) joursAajouter++;
                else joursAajouter += 2;

            DateTime resultatHypothese2 = DateDepart.AddDays(semaineAajouter + joursAajouter);

        }


Dans les 2 cas en ajoutant 123456 jours, nos résultats sont identiques 31 décembre 2304 pour l'hypothèse 1 et 27 juillet 2401 pour l'hypothèse 2.
Ça fait un sacré écart sur la durée!