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 : 13 274

Note :
Aucune note

Commentaire sur cette source (5)
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;
}

Historique

12 octobre 2004 10:00:19 :
Petit oubli

Commentaires et avis

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

signaler à un administrateur
Commentaire de hirex le 30/07/2008 17:58:27

Bonjour,

J'essai d'utiliser le calcul des jours fériés et j'ai un pb avec le Lundi de Paques.
La variable "intDayPaques" est à -8, du coup la ligne Dim dtMondayPaques As New DateTime(dtDate.Year, intMonthPaques, Math.Abs(intDayPaques) - 1) plante.

Quelqu'un a t-il une idée svp.
Merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

[C#] Condition dateTimePicker (samedi ou dimanche) [ par Stargirlfr ] Bonsoir, Je souhaiterais savoir s'il existe des fonctions qui permettent de faire des conditions sur les dateTimePicker ?Par exemple dire : "si le jou Faire une mise a jour d'une application en c# [ par redox87 ] Bonjour,je veux savoir comment en peut faire des mises a jours des applications en C#, le problème c'est que j'ai des applications portables sur ma cl Mise a jour d'une base des données [ par hfozepofpozfpfezpz ] Bonjour, j'aimerai ajouter un enregistrement a une base des données Sql server.Merci d'avance Mehdi Mise à jour [ par benameur11 ] salut , je n'arrive pas a mettre ma table à jour avec ces commandes OleDbDataAdapter DtaGrid = new OleDbDataAdapter("SELECT * FROM Paiement ",Conn); Contrôler les données lors de la saisie dans un datagridview [ par alexbesn ] Bonjour. J'ai un datagridview lié à un dataset. Je met à jour la base avec des Dataadaptateur et commandbuilder. Quand je modifie ou ajoute directem mise à jour d'une combobox sur un formulaire à partir d'un second formulaire [ par luudii34 ] Bonjour!Je suis en train de faire une application dans le cadre de mon BTS et j'ai beaucoup de mal avec le C#!Je cherche à mettre à jour une combobox Mise à jour frame à partir d'une autre frame [ par decan ] Bonjour,je souhaite mettre à jour une frame à partir des infos que je viens de sélectionner dans une autre frame.exemple : sélection d'une valeur dans Mise a jour fichier apres modif dans une DataGrid [ par logisoftfr ] bonjour a tous Voila, j'ai un form qui ne contient qu'une datagrid, ce form doit me servire a alimenter ma table, mais voila je ne sais pas comment l' Erreur avec DateTime [ par heriquet ] Bonjour.J'ai un problème assez ennuyeux avec une date.J'ai une application en C# qui tourne avec une base Access.Quand j'ouvre un formulaire de donnée


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.