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
-
Whismeril
Messages postés
14106
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 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
27
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);



Whismeril
Messages postés
14106
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2020
331
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...
cs_Robert33
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
27 > Whismeril
Messages postés
14106
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 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;
Whismeril
Messages postés
14106
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2020
331
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!