Retrouver le numero de semaine à partir d'une date

Signaler
Messages postés
39
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
30 octobre 2008
-
Messages postés
9
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
15 juin 2010
-
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

Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011

tu calculs le nombre de jours depuis le 01/01/N et tu divise par 7, ça devrais suffir je pense
Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011

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;
Messages postés
39
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
30 octobre 2008

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 !
Messages postés
39
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
30 octobre 2008

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
Messages postés
198
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
18 mars 2011
1
Cette source peut peut-être t'aider:
http://www.cppfrance.com/code.aspx?ID=20776
Messages postés
9
Date d'inscription
dimanche 24 septembre 2006
Statut
Membre
Dernière intervention
15 juin 2010
1
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