Premier jour d'une semaine

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 518 fois - Téléchargée 29 fois

Contenu du snippet

Cette fonction permet de récupérer le premier jour d'une semaine en fonction de son numéro et de l'année en question.

Source / Exemple :


private DateTime getPremierJourSemaine(int numeroSemaine,int annee)
{
	DateTime temp = new DateTime(annee,1,1);
	int compteurSemaine = 1;

	//D'abord, on va se caler sur le premier jeudi de l'année
	//Le premier jeudi dans l'année représente la première semaine
	//http://www.cl.cam.ac.uk/%7Emgk25/iso-time.html
	while(temp.DayOfWeek != DayOfWeek.Thursday)
	{
		temp = temp.AddDays(1);
	}

	//Maintenant, on revient sur le lundi précédent
	while(temp.DayOfWeek != DayOfWeek.Monday)
		temp = temp.AddDays(-1);

	//On va avancer de 7 jours en 7 jours pour trouver notre semaine
	while(compteurSemaine < numeroSemaine)
	{
		temp = temp.AddDays(7);
		compteurSemaine++;
	}

	return temp;
}

Conclusion :


Voila, rien de bien méchant mais ca peut toujours servir :)

A voir également

Ajouter un commentaire

Commentaires

whismeril
Messages postés
14419
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
31 mars 2020
365
pour eviter la boucle:

using System.Globalization;

private DateTime getPremierJourSemaine(int numeroSemaine, int annee)
{
Calendar cal = CultureInfo.InvariantCulture.Calendar;

//initialise le premier janvier de l'année
DateTime date = new DateTime(annee, 1, 1);

//Cherche le lundi suivant
int Jour = Convert.ToInt32(date.DayOfWeek);
date = date.AddDays(8 - Jour);

//extrait le numéro de semaine du lundi
int Semaine = cal.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

//ajoute le nombre de semaine
Semaine = 7 * (numeroSemaine - Semaine);
date = date.AddDays(Semaine);

return date;
}
flashkel
Messages postés
5
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
23 novembre 2007

doh!
mettre

date=date.AddDay(7);

plutot que

date=date.AddDay(1);
flashkel
Messages postés
5
Date d'inscription
vendredi 4 juin 2004
Statut
Membre
Dernière intervention
23 novembre 2007

Avec une seule boucle pour info avec la classe Calendar.

private DateTime getPremierJourSemaine(int numeroSemaine,int annee)
{
Calendar cal = CultureInfo.InvariantCulture.Calendar;
DateTime date=new DateTime(annee,1,1);
while(numeroSemaine!=cal.GetWeekOfYear(date,CalendarWeekRule.FirstFourDayWeek,DayOfWeek.Monday))
date=date.AddDays(1);
return date;
}
daivil
Messages postés
87
Date d'inscription
mardi 25 juin 2002
Statut
Membre
Dernière intervention
4 juin 2005

J'ai bien essayé de faire plus simple mais la classe DateTime ne semble pas gérer les semaines :)
JulSoft
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

je pense aussi qu'il y a plus simple
on doit pouvoir le faire en conaissant le jour du 1er janvier de l'année en question et, sauf erreur de ma part, il existe une fonction pour ça (je confond peut être avec le PHP où la fonction existe bel et bien)

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.