begin process at 2008 05 17 14:54:12
1 174 093 membres
211 nouveaux aujourd'hui
13 974 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

JOURS FÉRIÉS ET DIMANCHE


Information sur la source

Catégorie :Date / Heure Source .NET ( DotNet ) Classé sous : jour, ferie, dimanche Niveau : Débutant Date de création : 12/10/2004 Date de mise à jour : 12/10/2004 10:00:17 Vu : 10 625

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Cette fonction retourne un boolean à FALSE si le date passée en paramètre est un jour férié ou un dimanche

J'ai utilisé de nombreux exemples pour essayer de simplifier au maximum la fonction.

La formule utilisé pour calculer pâques : http://www.auduteau.net/calendar/cal2_9_3.shtml

Source

  • private bool bolIsWorkingDay(DateTime dtDate)
  • {
  • bool bolWorkingDay = true;
  • Array arrDateFerie = Array.CreateInstance(typeof(DateTime),8);
  • // 01 Janvier
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,1,1),0);
  • // 01 Mai
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,5,1),1);
  • // 08 Mai
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,5,8),2);
  • // 14 Juillet
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,7,14),3);
  • // 15 Aout
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,8,15),4);
  • // 01 Novembre
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,11,1),5);
  • // 11 Novembre
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,11,11),6);
  • // Noël
  • arrDateFerie.SetValue( new DateTime(dtDate.Year,12,25),7);
  • // Dimanche ou jour férié
  • bolWorkingDay = ! ((dtDate.DayOfWeek == DayOfWeek.Sunday) || (Array.BinarySearch(arrDateFerie,dtDate) >= 0));
  • if (bolWorkingDay )
  • {
  • // Calcul du jour de pâques (algorithme de Oudin (1940))
  • //Calcul du nombre d'or - 1
  • int intGoldNumber = (int)(dtDate.Year % 19);
  • // Année divisé par cent
  • int intAnneeDiv100 = (int)(dtDate.Year /100);
  • // intEpacte est = 23 - Epacte (modulo 30)
  • int intEpacte = (int)((intAnneeDiv100 - intAnneeDiv100/4 - (8 * intAnneeDiv100 + 13)/25 +(
  • 19 * intGoldNumber)+ 15) % 30);
  • //Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
  • int intDaysEquinoxeToMoonFull = (int)(intEpacte - (intEpacte/28)*(1 - (intEpacte/28)*(29/(intEpacte + 1))*((21 - intGoldNumber)/11)));
  • //Jour de la semaine pour la pleine lune Pascale (0=dimanche)
  • int intWeekDayMoonFull = (int)((dtDate.Year + dtDate.Year/4 + intDaysEquinoxeToMoonFull +
  • 2 - intAnneeDiv100 + intAnneeDiv100/4) % 7);
  • // Nombre de jours du 21 mars jusqu'au dimanche de ou
  • // avant la pleine lune Pascale (un nombre entre -6 et 28)
  • int intDaysEquinoxeBeforeFullMoon = intDaysEquinoxeToMoonFull - intWeekDayMoonFull;
  • // mois de pâques
  • int intMonthPaques =(int)( 3 + (intDaysEquinoxeBeforeFullMoon + 40)/44);
  • // jour de pâques
  • int intDayPaques = (int)(intDaysEquinoxeBeforeFullMoon + 28 - 31*(intMonthPaques / 4));
  • // lundi de pâques
  • DateTime dtMondayPaques = new DateTime(dtDate.Year,intMonthPaques,intDayPaques+1);
  • // Ascension
  • DateTime dtAscension = dtMondayPaques.AddDays(38);
  • //Pentecote
  • DateTime dtMondayPentecote = dtMondayPaques.AddDays(49);
  • bolWorkingDay=! ((DateTime.Compare(dtMondayPaques,dtDate)==0) || (DateTime.Compare(dtAscension,dtDate)==0)
  • || (DateTime.Compare(dtMondayPentecote,dtDate)==0));
  • }
  • return bolWorkingDay;
  • }
private bool bolIsWorkingDay(DateTime dtDate)
{
    bool bolWorkingDay = true;
    Array arrDateFerie = Array.CreateInstance(typeof(DateTime),8);
    // 01 Janvier
    arrDateFerie.SetValue( new DateTime(dtDate.Year,1,1),0);
    // 01 Mai
   arrDateFerie.SetValue( new DateTime(dtDate.Year,5,1),1);
   // 08 Mai
   arrDateFerie.SetValue( new DateTime(dtDate.Year,5,8),2);
   // 14 Juillet
   arrDateFerie.SetValue( new DateTime(dtDate.Year,7,14),3);
   // 15 Aout
   arrDateFerie.SetValue( new DateTime(dtDate.Year,8,15),4);
   // 01 Novembre
   arrDateFerie.SetValue( new DateTime(dtDate.Year,11,1),5);
   // 11 Novembre
   arrDateFerie.SetValue( new DateTime(dtDate.Year,11,11),6);
   // Noël
   arrDateFerie.SetValue( new DateTime(dtDate.Year,12,25),7);

   // Dimanche ou jour férié
   bolWorkingDay = ! ((dtDate.DayOfWeek == DayOfWeek.Sunday) || (Array.BinarySearch(arrDateFerie,dtDate) >= 0));
   if (bolWorkingDay )
   {
      // Calcul du jour de pâques (algorithme de Oudin (1940))
      //Calcul du nombre d'or - 1
      int intGoldNumber = (int)(dtDate.Year % 19);
      // Année divisé par cent
      int intAnneeDiv100 = (int)(dtDate.Year /100);
      // intEpacte est = 23 - Epacte (modulo 30)
      int intEpacte = (int)((intAnneeDiv100 - intAnneeDiv100/4 - (8 * intAnneeDiv100 + 13)/25 +(				
      19 * intGoldNumber)+ 15) % 30);
      //Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
      int intDaysEquinoxeToMoonFull = (int)(intEpacte - (intEpacte/28)*(1 - (intEpacte/28)*(29/(intEpacte + 1))*((21 - intGoldNumber)/11)));
      //Jour de la semaine pour la pleine lune Pascale (0=dimanche)
      int intWeekDayMoonFull = (int)((dtDate.Year + dtDate.Year/4 + intDaysEquinoxeToMoonFull +
			2 - intAnneeDiv100 + intAnneeDiv100/4) % 7);
      // Nombre de jours du 21 mars jusqu'au dimanche de ou 
      // avant la pleine lune Pascale (un nombre entre -6 et 28)
      int intDaysEquinoxeBeforeFullMoon = intDaysEquinoxeToMoonFull - intWeekDayMoonFull;
      // mois de pâques
      int intMonthPaques =(int)( 3 + (intDaysEquinoxeBeforeFullMoon + 40)/44);
      // jour de pâques
      int intDayPaques = (int)(intDaysEquinoxeBeforeFullMoon + 28 - 31*(intMonthPaques / 4));
      // lundi de pâques
      DateTime dtMondayPaques = new DateTime(dtDate.Year,intMonthPaques,intDayPaques+1);
      // Ascension
      DateTime dtAscension = dtMondayPaques.AddDays(38);
      //Pentecote
      DateTime dtMondayPentecote = dtMondayPaques.AddDays(49);
      bolWorkingDay=! ((DateTime.Compare(dtMondayPaques,dtDate)==0) || (DateTime.Compare(dtAscension,dtDate)==0)
      || (DateTime.Compare(dtMondayPentecote,dtDate)==0));
   }
   return bolWorkingDay;
}
12 octobre 2004 10:00:19 :
Petit oubli

Sources en rapport avec celle ci

  • signaler à un administrateur
    Commentaire de gg00xiv le 13/10/2004 01:08:52

    Un doute sur le lundi de pancôte :) enfin à vérifier dans le temps...

  • signaler à un administrateur
    Commentaire de fnadaus le 11/07/2005 18:08:06

    Merci pour ce bout de code franchement bien sympatique et utile !
    j me suis permis de rajouter le samedi en jour 'non travaillé' ...

  • signaler à un administrateur
    Commentaire de Yogly le 05/04/2007 12:49:51

    Merci pour ce bout de code ,qu'y ma pérmis d'en faire une version WinDev

  • signaler à un administrateur
    Commentaire de quineman le 14/09/2007 16:50:14

    J'ai fait une traduction en VB.net mais il me trouve paque le 08/04/2007 au lieu du 09/04/2007. Ce qui me décale tout le reste...
    Vous voyer d'ou ça peut venir ?

    Public Function IsWorkingDay(ByVal dtDate As DateTime) As Boolean
            Dim bolWorkingDay As Boolean = True
            Dim arrDateFerie As Array
            arrDateFerie = Array.CreateInstance(GetType(DateTime), 8)
            ' 01 Janvier
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 1, 1), 0)
            ' 01 Mai
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 1), 1)
            ' 08 Mai
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 5, 8), 2)
            ' 14 Juillet
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 7, 14), 3)
            ' 15 Aout
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 8, 15), 4)
            ' 01 Novembre
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 1), 5)
            ' 11 Novembre
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 11, 11), 6)
            ' Noël
            arrDateFerie.SetValue(New DateTime(dtDate.Year, 12, 25), 7)

            ' Dimanche ou jour férié
            If (dtDate.DayOfWeek = DayOfWeek.Sunday) Or Array.BinarySearch(arrDateFerie, dtDate) >= 0 Then bolWorkingDay = False

            If bolWorkingDay Then
                ' Calcul du jour de pâques (algorithme de Oudin (1940))
                'Calcul du nombre d'or - 1
                Dim intGoldNumber As Integer = CInt(dtDate.Year Mod 19)
                ' Année divisé par cent
                Dim intAnneeDiv100 As Integer = CInt(dtDate.Year / 100)
                ' intEpacte est = 23 - Epacte (modulo 30)
                Dim intEpacte = CInt((intAnneeDiv100 - intAnneeDiv100 / 4 - (8 * intAnneeDiv100 + 13) / 25 + (19 * intGoldNumber) + 15) Mod 30)
                'Le nombre de jours à partir du 21 mars pour atteindre la pleine lune Pascale
                Dim intDaysEquinoxeToMoonFull As Integer = CInt((intEpacte - (intEpacte / 28) * (1 - (intEpacte / 28) * (29 / (intEpacte + 1)) * ((21 - intGoldNumber) / 11))))
                'Jour de la semaine pour la pleine lune Pascale (0=dimanche)
                Dim intWeekDayMoonFull As Integer = CInt(((dtDate.Year + dtDate.Year / 4 + intDaysEquinoxeToMoonFull + 2 - intAnneeDiv100 + intAnneeDiv100 / 4) Mod 7))
                ' Nombre de jours du 21 mars jusqu'au dimanche de ou
                ' avant la pleine lune Pascale (un nombre entre -6 et 28)
                Dim intDaysEquinoxeBeforeFullMoon As Integer = intDaysEquinoxeToMoonFull - intWeekDayMoonFull
                ' mois de pâques
                Dim intMonthPaques As Integer = CInt(3 + (intDaysEquinoxeBeforeFullMoon + 40) / 44)
                ' jour de pâques
                Dim intDayPaques As Integer = CInt(intDaysEquinoxeBeforeFullMoon + 28 - 31 * (intMonthPaques / 4))
                ' lundi de pâques
                Dim dtMondayPaques As DateTime = New DateTime(dtDate.Year, intMonthPaques, intDayPaques + 1)
                ' Ascension
                Dim dtAscension As DateTime = dtMondayPaques.AddDays(38)
                'Pentecote
                Dim dtMondayPentecote As DateTime = dtMondayPaques.AddDays(49)
                If (DateTime.Compare(dtMondayPaques, dtDate) = 0) Or (DateTime.Compare(dtAscension, dtDate) = 0) Or (DateTime.Compare(dtMondayPentecote, dtDate) = 0) Then
                    bolWorkingDay = False
                Else
                    bolWorkingDay = True
                End If

            End If

            Return bolWorkingDay

        End Function

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Boutique

Boutique de goodies CodeS-SourceS