Utilisation de Difftime() avec des dates en string

Résolu/Fermé
Romain - 4 mars 2013 à 11:14
 Romain - 7 mars 2013 à 08:00
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

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()
2
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"
0
Utilisateur anonyme
5 mars 2013 à 08:41
Si ce n'est que ça tu peux l'écrire toi même. Quelque chose du genre :


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;
}
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
0
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 5/03/2013 à 09:12
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; 
} 
0