Jour ferie, samedi dimanche

Contenu du snippet

Voici une fonction que j'ai faite pour verifier si une date calculée ne tombait pas un samedi ou un dimanche. Debutant en C# (15 jours) j'ai repris un code tiré de VBFrance que j'ai remis en C#. Ayant eu des pb de transcription il existe certainement une manier plus simple de le faire. A priori le code fonctionne et sort de bon resultats suite à un test sur 4 années. Toute amelioration et correction sont de toute facon bienvenu.

Source / Exemple :


//travaillant pour une boite anglaise les variables sont moitie en anglais 
//moitie en francais.
//DateEnvoi est la variable calculee
string DateEnvoi;
bool DayOff;
DateTime Paques;
DateTime Ascencion;
DateTime Pentecote;
		
void LoadDayOff()
 {

	int DD;
	int YY;
	int MM;
	int GldNum;
	int Epacte;
	int Valeur;
	DateTime FMoon;
			

	DayOff=true;
//je boucle pour verifie que la nouvelle date calcule ne soit  pas chome.
while (DayOff==true)
{
DD=Convert.ToInt16(Convert.ToDateTime(DateEnvoi).Day.ToString());
YY=Convert.ToInt16(Convert.ToDateTime(DateEnvoi).Year.ToString());
MM=Convert.ToInt16(Convert.ToDateTime(DateEnvoi).Month.ToString());
//tant que l'on tombe sur un jour ferie je refait un tour pour verifie si le lendemain est ferie
DayOff=false;
//Calcul pour les date fixes du style 1er janvier, 11 novembre,...
	if (DD==1 && MM==1)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==1 && MM==5)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==8 && MM==5)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==14 && MM==7)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==15 && MM==8)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==1 && MM==11)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==11 && MM==11)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (DD==25 && MM==12)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	//Calcul du nbre d'or
	GldNum=(YY%19)+1;
	Valeur=YY/100;
	Valeur=((2+Valeur)*3/7);
	Epacte=Convert.ToInt16((11*GldNum-(3+Valeur))%30);
	FMoon=Convert.ToDateTime("19/04/"+YY);
	FMoon=FMoon.AddDays(-((Epacte+6)%30));
	if (Epacte==24)
	{FMoon.AddDays(-1);}
	if (Epacte==25 && (YY>=1900 && YY<2000))
	{FMoon.AddDays(-1);}

	//Calcul de Paques
	switch (FMoon.DayOfWeek.ToString())
	{
	case "Sunday":
	Valeur=0;
	break;
	case "Monday":
	Valeur=1;
	break;
	case "Tuesday":
	Valeur=2;
	break;
	case "Wednesday":
	Valeur=3;
	break;
	case "Thursday":
	Valeur=4;
	break;
	case "Friday":
	Valeur=5;
	break;
	case "Saturday":
	Valeur=6;
	break;
	}
	Paques=FMoon.AddDays(-(Valeur)+1+7);
	if (DD==Paques.Day && MM==Paques.Month)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	//Calcul pour l'ascension
	Ascencion=Paques.AddDays(38);
	if (DD==Ascencion.Day && MM==Ascencion.Month)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	//Calcul pour Pentecote
	Pentecote=Ascencion.AddDays(11);
	if (DD==Pentecote.Day && MM==Pentecote.Month)
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}

	//Maintenant je regarde si on ne tombe pas sur un samedi ou un dimanche
	if (Convert.ToDateTime(DateEnvoi).DayOfWeek.ToString()=="Sunday")
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
	DayOff=true;
	}
	if (Convert.ToDateTime(DateEnvoi).DayOfWeek.ToString()=="Saturday")
	{
	DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(2).ToShortDateString();
	DayOff=true;
	}
}
}

Conclusion :


Merci à vbfrance et charp qui me permette d'avancer et de comprendre ce que je fais tous les jours;
Merci a toutes les critiques qui permettent au site de continuer d'avancer.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.