Retrouver le numero de semaine à partir d'une date

sebclick Messages postés 39 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 30 octobre 2008 - 8 déc. 2005 à 21:03
croati Messages postés 9 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 15 juin 2010 - 15 juin 2010 à 18:13
Bonjour,

Je recherche une fonction qui permet de retrouver le numéro de semaine à partir d'une date.

Je passe en paramètre 08 12 2005 et ça me retourne 49 par exemple.

Auriez vous quelques indices ? Merci d'avance.

6 réponses

dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
8 déc. 2005 à 21:22
tu calculs le nombre de jours depuis le 01/01/N et tu divise par 7, ça devrais suffir je pense
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
8 déc. 2005 à 21:33
admettons la date :

Jours/Mois/Annee (int Jour,Mois,Annee;)



tu fais une boucle avec :



int nbMois[12]={31,28,31,30,31,30,31,31,30,31,30,31};

int nbJour=0;

for(i=1; i<Mois; i++)

{

if(i==2) nbJour+=nbMois[i-1] + Bissectile(Annee) // Bissectile renvoi 1 si Annee est bissectile

else nbJour+=nbMois[i-1];

}

ensuite tu ajoutes le Jour :

nbJour+=Jours;
0
sebclick Messages postés 39 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 30 octobre 2008
9 déc. 2005 à 11:21
Bonjour,

Merci dark_naruto25 d'avoir répondu.
Par contre je serais plus pour une solution moins artisanale. Car si le premier jour de l'année est un jeudi par exemple, avec ta solution, je ne suis pas sur que cela fonctionne.

La nuit portant conseil, je me suis dit que je pouvais utilisé la fonction strftime.

size_t strftime (char *s, size_t max, const char *format, const struct tm *tm);

Par contre, j'ai fait quelques tests, et je n'arrive pas à l'utiliser correctement.
J'initialise ma structure tm avec la date du jour et ça me retourne 0 dans ma chaine.

Voici le code :

char NumSemaine[10];
struct tm *date;
time_t ti;
date->tm_year = 105;
date->tm_mon = 11;
date->tm_mday = 9;
strftime(NumSemaine,5,"%V",date)

Voyez vous une erreur dans ce bout de code ?

Merci d'avance !
0
sebclick Messages postés 39 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 30 octobre 2008
9 déc. 2005 à 11:42
En approfondisant mes recherches, j'ai essayer ceci :

char NumSemaine[10];


struct tm *date;
time_t ti;


date->tm_year = 106;
date->tm_mon = 0;
date->tm_mday = 02;
date->tm_hour = 0;
date->tm_min = 0;
date->tm_sec = 0;


ti = mktime(date);
date=localtime(&ti);


strftime(NumSemaine,5,"%V",date);

Et ça a l'air de fonctionner.
@ pluch
0

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

Posez votre question
cs_magma Messages postés 198 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 18 mars 2011
9 déc. 2005 à 19:42
Cette source peut peut-être t'aider:
http://www.cppfrance.com/code.aspx?ID=20776
0
croati Messages postés 9 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 15 juin 2010 1
15 juin 2010 à 18:13
slt tout les programmeur

Option Explicit
Private Function JJ(Dates As Date)
Dim y As Long, m As Long, DDdd As Double
Dim YYYY As Long, MM As Long
Dim a As Double, b As Double
YYYY = Year(Dates)
MM = Month(Dates)
DDdd = Day(Dates) + Hour(Dates) / 24 + Minute(Dates) / 24 / 60 + Second(Dates) / 24 / 60 / 60
If MM <2 Then y YYYY - 1: m = MM + 12 Else y = YYYY: m = MM
If Dates >= 1582.1015 Then
a = y \ 100
b = 2 - a + a \ 4
End If
If y = Abs(y) Then
JJ = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5 + b
Else
JJ = Int(365.25 * y) + Int(30.6001 * (m + 1)) + DDdd + 1720994.5
End If
End Function
Private Function JourSemaine(Dat As Date) As Long
Dim a As Double
a = JJ(Dat) + 1.5
a = a Mod 7
JourSemaine = a
End Function
Private Function JourAnnée(Dat As Date) As Integer
Dim I As Integer
I = Year(Dat)
If (I Mod 400 0) Or ((I Mod 100 <> 0) And (I Mod 4 0)) Then
JourAnnée = Int((275 * Month(Dat)) / 9) - Int((Month(Dat) + 9) / 12) + Day(Dat) - 30
Else
JourAnnée = Int((275 * Month(Dat)) / 9) - (2 * Int((Month(Dat) + 9) / 12)) + Day(Dat) - 30
End If
End Function
Public Function NumeroSemaine(Dates As Date) As Byte
Dim NbJour1ereSemaine As Byte, JourJulienDates As Double, JourJulien1Janvier
Dim JourSemaine1Janvier As Byte, JourAnneeDates As Integer
JourJulienDates = JJ(Dates)
JourJulien1Janvier = JJ(DateSerial(Year(Dates), 1, 1))
JourSemaine1Janvier = JourSemaine(DateSerial(Year(Dates), 1, 1) + TimeSerial(0, 0, 0))
If JourSemaine1Janvier = 0 Then
NbJour1ereSemaine = 1
Else
NbJour1ereSemaine = -(JourSemaine1Janvier - 8)
End If
NumeroSemaine = Int((JourAnnée(Dates) - 1 - NbJour1ereSemaine) / 7) + 2
If NumeroSemaine > 52 Then NumeroSemaine = NumeroSemaine - 52
End Function
0
Rejoignez-nous