Comment obtenir une date à partir de son numéro de jour dans l'année?
Bonjour à tous,:D
Je cherche à exprimer une date au format dd/mm/yyyy à partir de son numéro du jour dans l'année en langage C.
J'ai pensé à récupérer la date d'aujourd'hui, ainsi j'ai son numéro du jour dans l'année grâce à la structure tm remplie par la fonction gmtime.
Puis faire la différence entre le numéro du jour dans l'année ainsi obtenu et le numéro du jour dans l'année dont je cherche la date au format dd/mm/yyyy correspondante.
Enfin, retirer cette différence à la date d'aujourd'hui pour obtenir la date recherchée. Néanmoins cette dernière étape me pose problème car je sais pas comment retirer x jours à une date pour obtenir une date et si c'est facile en C.
Si quelqu'un a une solution plus simple à proposer ou peut me débloquer sur ce dernier point dans la solution que j'ai commencé à entreprendre, je lui en serai extrêmement reconnaissant car ça fait un bout de temps que je me torture l'esprit sans aboutir à la résolution du problème!
Voici mon bout de code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <stdio.h>
#include <time.h>
int main(void)
{
char *date_jour;
struct tm *ptm;
time_t sysdat;
int no_jour = 125;
int diff_nb_jour;
/* date du jour au format date universel */
sysdat = time(NULL);
ptm = gmtime(&sysdat);
/* affichage date du jour au format mm/dd/yy */
strftime(date_jour,9,"%D",ptm);
printf("date_jour=%s\n",date_jour);
/* difference entre numero date du jour dans l'annee et numero date dans l'annee dont on recherche sa correspondance au format mm/dd/yy */
if(no_jour < ptm->tm_yday)
diff_nb_jour = ptm->tm_yday - no_jour;
else if(no_jour > ptm->tm_yday)
printf("ca ne devrait pas arriver\n");
/* Affichage date recherchee au format "mm/dd/yy" */
/******et là je sais pas comment faire************/
ptm = gmtime(&sysdat);
strftime(date_result,9,"%D",ptm);
printf("date_result=%s\n",date_jour);
/****************************************/
return 0;
} |
Merci d'avance!
Comment obtenir une date à partir de son numéro de jour dans l'année?
Merci ta réponse m'a débloquée et j'ai fait quelques petits tests qui répondent à mes attentes. Néanmoins, je ne comprends pas pourquoi tm.mday contient le numero du jour dans l'année alors que j'aurais pensé que ce serait plutôt le champ tm.yday qui devait être initialisé à cette valeur et pourquoi est-il nécessaire d'initialiser le champ tm.year?
Comment obtenir une date à partir de son numéro de jour dans l'année?
Bonjour Emmanuel,
dsl d'insister mais moi quand je lit le man:
tm_yday
Le nombre de jours écoulés depuis le 1er Janvier, dans l’intervalle 0 à 365 (0 à 364 si l’année n’est pas
bissextile). (c le cas pour 2006)
tm_mday
Le quantième du mois, dans l’intervalle 1 à 31.
je comprend qu'il faut choisir tm_yday comme champ dans la structure tm et non tm_mday.
Pour ta deuxième explication concernant le champ tm_year, ton explication me va et je l'accepte volontier!