Question DateTime

Spidard Messages postés 9 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 10 septembre 2006 - 17 févr. 2006 à 09:39
Spidard Messages postés 9 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 10 septembre 2006 - 17 févr. 2006 à 12:59
Bonjour.

J'aimerais savoir comment créer un objet DateTime, ou même String, peut importe du moment qu'il "ressemble" à une date

a partir du numéro du jour (0-6), du numéro de semaine (0-51 ou 1-52) et de l'année.

J'ai remarqué qu'avec un DateTime on pouvait facilement extraire le
numéro du jour, de semaine, mois etc... mais impossible de faire
l'inverse !

est-ce que quelqu'un pourrait m'aider a ce sujet ? Je dois absolument
avoir trouvé sa pour la semaine prochaine et je me suis déjà creusé la
tête toute la soirée sans aboutir.



ou alors récupérer la date du premier jour de la semaine



merci d'avance

5 réponses

taoetc Messages postés 346 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 3 septembre 2007 3
17 févr. 2006 à 09:55
un petit algo des familles
//tu connais l'année, donc , tu peux avoir ta date de ref au premeir janvier
DateTime datBase = DateTime.Parse("01/01/"+ annee);

//Tu connais le nombre de semaine donc tu peux arriver au lundi
datBase = datBase.AddDays( nbrSemain*7);

//Il te suffit maintenant de trouver le bon jour
while (datBase.DayOfWeek != jourSemaine)
datBase = datBase.AddDays(1);

normalement , tu as alors le bon objet datetime

il faut peut etre ajouter le nbr de semaine, pour bien tombé sur le lundi de la semaine que tu veux.

voil, j'ai pas trop regardé l'objet datetime, mais l'algo me semble facile , donc, tu n'y perds pas grand chose, meme si l'objet datetim te permet de faire une des étape de l'algo un peu plus proprement


Be happy , by
Tao
0
taoetc Messages postés 346 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 3 septembre 2007 3
17 févr. 2006 à 10:08
ajuster , pas ajouter le nbr de semaine

et ca :
//Il te suffit maintenant de trouver le bon jour
while (datBase.DayOfWeek != jourSemaine)
datBase = datBase.AddDays(1);
c'est n'importe quoi, days of week renvoie le jour de la semaine en lettre

il faut faire directement
datBase = datBase.AddDays (jourSemaine+1); //si le jour de la semaine est de 1 à 7

bon alors voila le truc qui marche

DateTime datBase = DateTime.Parse("01/01/"+ annee).AddDays( ((nbrSemain-1)*7) + jourSemaine +1);

nbrSemaine de 1à 52
jour de la semaine de 1à 7

l'instruction génére une date au premeir janvier de l'année, jout le nombre de semaine -1 pour se trouver sur le dimanche de la semaine précédente, ajoute le nombre de jour de la semaine

j'ai juste testé sur une date


Be happy , by
Tao
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
17 févr. 2006 à 10:21
DayOfWeek est un enum... donc il te renvoie aussi en int...
il suffit de faire :

(int)datBase.DayOfWeek


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
0
Spidard Messages postés 9 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 10 septembre 2006
17 févr. 2006 à 10:39
ok merci infiniment. Je suis en train de tester, je repasserai ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Spidard Messages postés 9 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 10 septembre 2006
17 févr. 2006 à 12:59
Re. Donc après quelques modifs, sa marche nikel, merci beaucoup. Il a
qd meme fallu quelques SI pour tenir compte du 1er jour de l'année : si
le 01 jan n'est pas un lundi, alors il fait encore parti de la 52e
semaine, et non la 1ere. Au final, sa donne sa :

private DateTime GetDate(int annee,int nbrSemain,string jourSemaine)

{

int jour=-1;

int premierJour;

switch(jourSemaine)

{

case"lundi":

jour=1;

break;

case"mardi":

jour=2;

break;

case"mercredi":

jour=3;

break;

case"jeudi":

jour=4;

break;

case"vendredi":

jour=5;

break;

case"samedi":

jour=6;

break;

case"dimanche":

jour=7;

break;

}

DateTime datBase = DateTime.Parse("01/01/"+ annee);

premierJour=(int)datBase.DayOfWeek;



if(premierJour!=0)

{

if(premierJour==1)

{

if(nbrSemain==1)



datBase=datBase.AddDays(jour-1);

else



datBase=datBase.AddDays(((nbrSemain-1)*7)+(jour-1));

}

else



datBase=datBase.AddDays(((nbrSemain-1)*7)+(jour+(7-premierJour)));

}

else



datBase=datBase.AddDays(((nbrSemain-1)*7)+(jour-premierJour));



return datBase;

}
0
Rejoignez-nous