Premier jour d'une semaine

5/5 (6 avis)

Snippet vu 27 212 fois - Téléchargée 31 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
17406
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2022
598
9 oct. 2009 à 21:48
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

9 juil. 2007 à 14:48
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

9 juil. 2007 à 14:44
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

4 juin 2005 à 09:23
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

2 juin 2005 à 19:02
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)
Afficher les 6 commentaires

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.