Jour ferie, samedi dimanche

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 818 fois - Téléchargée 31 fois

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

Ajouter un commentaire

Commentaire

Messages postés
2
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
13 octobre 2003

On peut remplacer
switch (FMoon.DayOfWeek.ToString())
{
case "Sunday":
Valeur=0;
break;
...
}
par
Valeur = FMoon.DayOfWeek;

De plus, pour les tests sur les différentes dates à contrôler, je pense qu'il serait plus facile d'utiliser une liste ou un tableau.
ça réduit la quantité de code et facilite la mainteance, tout en restant lisible. Sans compter que ces dates changent de pays à pays.
Un truc du genre :
ArrayList listDayOff= new ArrayList();
listDayOff.Add("1/1");
listDayOff.Add("1/5");
listDayOff.Add("8/5");
listDayOff.Add("14/7");
listDayOff.Add("15/8");
listDayOff.Add("1/11");
listDayOff.Add("11/11");
listDayOff.Add("25/12");

string DayMonth = DD.ToString() +"/"+MM.ToString();
if (listDayOff.Contains(DayMonth))
{
DateEnvoi=Convert.ToDateTime(DateEnvoi).AddDays(1).ToShortDateString();
DayOff = true;
}

L'utilisation de string n'est pas génial, mais bon, c'est vite fais et un peu plus clair je trouve.

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.