begin process at 2010 02 10 00:06:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > JOURS FÉRIÉS ET DIMANCHE

JOURS FÉRIÉS ET DIMANCHE


 Information sur la source

Note :
Aucune note
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 :14 516

Auteur : sunny

Ecrire un message privé
Commentaire sur cette source (6)
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

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) CALCUL DATES & JOURS FÉRIÉS par DCTC33
Source avec Zip Source avec une capture Source .NET (Dotnet) DIFFÉRENCE DE TEMPS, XML, POCKETPC / WINFORMS...... par Steph115
Source avec Zip Source avec une capture Source .NET (Dotnet) HORLOGE/ALARME NUMÉRIQUE par Bio3G
Source avec Zip Source avec une capture Source .NET (Dotnet) COMPTE À REBOURS par Azema
Source .NET (Dotnet) CLASSE DATE AVEC QUELQUES FONCTIONS par ricklekebekoi

 Sources en rapport avec celle ci

Source .NET (Dotnet) PREMIER JOUR D'UNE SEMAINE par daivil

Commentaires et avis

Commentaire de gg00xiv le 13/10/2004 01:08:52

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

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é' ...

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

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

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

Commentaire de bouba_zyx le 09/12/2009 17:36:23

plantage en 2013 pour le lundi de pâques :
DateTime dtMondayPaques = new DateTime(dtDate.Year,intMonthPaques,intDayPaques+1);
à remplacer par :
DateTime dtMondayPaques = new DateTime(dtDate.Year, intMonthPaques, intDayPaques).AddDays(1);

sinon super code...

 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 du programme automatique [ par gomoz ] BonjourAvant de déployer mon application, je veux implémenter une méthode pour mettre à jour l'application (et le fichier de configuration qui va avec webService mis à jour via un winForm [ par piwane ] Bonjour,je vais essayer d'être clair...j'aimerai pouvoir accéder, via un webService, à l'état d'une appli (codée en C# winForm).quelqu'un sait-il s'il Threading sur le .NET CF [ par t00f ] Bonjour à tous, Je viens vers vous car j'ai une question qui peut paraitre stupide mais sincère : Je cherche a créer un Control personnalisé (type c


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,016 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales