Utilisation de Difftime() avec des dates en string

Résolu
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

3 réponses

  1. Romain
     
    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
  2. Romain
     
    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
    1. Utilisateur anonyme
       
      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
    2. Romain
       
      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
    3. Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
       
      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