Utilisation de Difftime() avec des dates en string
Résolu
Romain
-
Romain -
Romain -
Bonjour,
Je développe un programme en C et j'utilise des API qui me permettent de récuperer des dates au formats string "26-02-2013".
Je souhaiterais faire une comparaison de deux dates de ce format mais je ne trouve pas comment faire avec time.h
Auriez vous une solution ?
Cordialement
Je développe un programme en C et j'utilise des API qui me permettent de récuperer des dates au formats string "26-02-2013".
Je souhaiterais faire une comparaison de deux dates de ce format mais je ne trouve pas comment faire avec time.h
Auriez vous une solution ?
Cordialement
A voir également:
- Utilisation de Difftime() avec des dates en string
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Nombre de jours entre deux dates excel - Guide
- Vous avez utilisé ce numéro de téléphone à de trop nombreuses reprises - Forum Gmail
- Dossier en cours d'utilisation - Forum Windows 8 / 8.1
3 réponses
Solution : Vu que personne ne sait comment faire (même sur les forums anglais je n'ai pas trouvé de cas similaires), j'ai reformaté la date pour l'obtenir sous le format AAAA-MM-DD et j'ai utilisé un Strcmp()
Il y a différentes fonctions qui peuvent t'aider :
https://man7.org/linux/man-pages/man3/strptime.3.html
https://man7.org/linux/man-pages/man3/strftime.3.html
https://linux.die.net/man/3/mktime
https://man7.org/linux/man-pages/man3/strptime.3.html
https://man7.org/linux/man-pages/man3/strftime.3.html
https://linux.die.net/man/3/mktime
Merci mais cela fonctionne avec des mois sous forme d'entiers. A priori je n'ai pas trouvé comment faire avec des mois sous forme "Mar", "Apr", "Dec"
Si ce n'est que ça tu peux l'écrire toi même. Quelque chose du genre :
Et un exemple d'utilisation :
char* get_month(int n) {
if (n < 0 || n > 12)
return NULL;
char *month = (char*)malloc(3 * sizeof(char));
switch (n) {
case 1:
sprintf(month,"Jan");
break;
case 2:
sprintf(month,"Feb");
break;
case 3:
sprintf(month,"Mar");
break;
case 4:
sprintf(month,"Apr");
break;
case 5:
sprintf(month,"May");
break;
case 6:
sprintf(month,"Jun");
break;
case 7:
sprintf(month,"Jul");
break;
case 8:
sprintf(month,"Aug");
break;
case 9:
sprintf(month,"Sep");
break;
case 10:
sprintf(month,"Oct");
break;
case 11:
sprintf(month,"Nov");
break;
case 12:
sprintf(month,"Dec");
break;
}
return month;
}
Et un exemple d'utilisation :
int main() {
char *p;
if ((p = get_month(1)) != NULL)
printf("%s\n", p); // Affiche "Jan"
else
// Traiter l'erreur
return 0;
}
Merci pour ce code et cet exemple. Cependant, ce n'est pas ca qui m'interesse mais bien l'inverse. Je m'explique :
J'obtiens une date "20-Mar-13 09:35" et une autre "26-Feb-13 10:44". Je souhaite faire la différence entre ces deux dates (uniquement pour savoir si celle ci est positive ou négative).
J'avais donc pensé à utiliser DIFFTIME(), mais il me faut des dates au format time_t....
Peut être qu'une solution du genre fonctionnerait ?
1- Extraire par rapport à la position dans la chaine de caractere : var1=20 var2=Mar var3 =13
2- A partir d'un tableau : char[] = "Jan", "Feb", "Mar", ....... faire une recherche "LIKE" avec var2 et en deduire l'indice qui correspondra au mois
3- Récuperer la date sous format var1+indicemois+var3
4- Utiliser une structure pour obtenir un time_t pour faire le Difftime()
Dans d'autres langages j'aurais su le faire mais la en C je ne suis pas certain du tout...
Merci d'avance
J'obtiens une date "20-Mar-13 09:35" et une autre "26-Feb-13 10:44". Je souhaite faire la différence entre ces deux dates (uniquement pour savoir si celle ci est positive ou négative).
J'avais donc pensé à utiliser DIFFTIME(), mais il me faut des dates au format time_t....
Peut être qu'une solution du genre fonctionnerait ?
1- Extraire par rapport à la position dans la chaine de caractere : var1=20 var2=Mar var3 =13
2- A partir d'un tableau : char[] = "Jan", "Feb", "Mar", ....... faire une recherche "LIKE" avec var2 et en deduire l'indice qui correspondra au mois
3- Récuperer la date sous format var1+indicemois+var3
4- Utiliser une structure pour obtenir un time_t pour faire le Difftime()
Dans d'autres langages j'aurais su le faire mais la en C je ne suis pas certain du tout...
Merci d'avance
Attention lors du malloc, sprintf ajoute le caractère de fin de chaine '\0' ce qui donne 4 char ne pas oublié de free. Ce serait moins galère d'utiliser un tableau pour stocker les mois à la place du switch ça fait moins de code répétitif :
char *get_month(unsigned int n){
char *p,month[12][4]={
"Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"
};
if(n<12){
p=malloc(sizeof(char)*4);
strcpy(p,month[n]);
return p;
}
return NULL;
}