IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Conversion de date en durée


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Conversion de date en durée
    Bonjour,
    J'ai une date sous la forme jj/mm/AAAA 00:00:00 que je voudrais convertir en durée pour ensuite pourvoir faire des calculs sur cette date.
    J'ai essayé mktime, mais le résultat est étrange ( avec la date 02/10/2006 en entrée, j'obtiens 27/01/1982 en sortie .... )
    Existe-t-il une fonction, ou un exemple de programmation ?

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Speedycool
    J'ai essayé mktime, mais le résultat est étrange
    Et si tu montrais ton code avec un exemple d'utilisation ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Par définition, une date n'est pas une durée. Pour cela, il faut faire une différence de dates.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Voici le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    printf("Traitement avec dates forcees %s a %s \n", ExternDate, ExternDate2);
        strncpy(limit->limit_inf, ExternDate, 10);
        strncpy(limit->limit_sup, ExternDate2, 10);
     
        chk_date(limit->limit_inf);
        printf("limite %s \n", limit->limit_inf);
     
        intps = mktime(limit->limit_inf);
        printf("Date intps : %s \n", ctime(&intps));
        pstDate = localtime (&intps);
     
        printf(" DateChar %02d/%02d/%04d \n",
        				pstDate->tm_mday,
        				pstDate->tm_mon+1,   
                                    pstDate->tm_year+1900);
    ExternDate et ExternDate2 sont des dates données dans le fichier INI sous la forme JJ/MM/SSAA
    Je les transforme par chk_date
    et je voudrais que intps contienne une durée correspondant à la date contenue dans limit_inf, afin de pouvoir effectuer des calculs ensuite ( + ou - n jours, ..... )
    Voici le résultat, avec une date en entrée du 02/10/2006 :

    Traitement avec dates forcees 02/10/2006 a 02/10/2006
    limite 02/10/2006 00:00:00
    Date intps : Wed Jan 27 21:47:13 1982

    DateChar 27/01/1982

    Merci d'avance de votre aide.
    Dernière modification par Ti-R ; 05/10/2006 à 16h47. Motif: Penser à la balise [CODE] [/CODE]

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, si tu veux la durée qui sépare le 1janvier 2003 au 31 décembre 2006 (ou toute différence entre deux dates quelconques), l'idéal, c'est d'utiliser difftime(), qui fournit le nombre de seconde entre la date et l'heure fournie en premier argument et celle fournie en second argument...

    Les dates à donner en argument son de type tyme_t, et une convertion dans ce format peut s'avérer nécessaire

    Si le nombre de secondes, c'est trop "court" pour toi, rien ne t'empeche de le diviser par 60 pour obtenir le nombre de minutes, par 3600 pour obtenir le nombre d'heures ou par 86400 pour obtenir le nombre de jours (mais ca, tu t'en serais sans doute douté )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Invité
    Invité(e)
    Par défaut
    "Les dates à donner en argument son de type tyme_t, et une convertion dans ce format peut s'avérer nécessaire "

    justement, c'est ce que je cherche !

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Speedycool
    Voici le code en question :

    printf("Traitement avec dates forcees %s a %s \n", ExternDate, ExternDate2);
    Merci d'utiliser les balises code. (bouton )

    Ton code est incomplet. Il ne compile pas.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Excusez-moi pour l'absence de [code]/[code]

    Voici donc le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    struct LIMIT *CalculLimit(int NbJours)
    {
    	time_t intps;
    	char   DateChar[31];
    	char   LocalTime[31];
    	char   ExternDate[31];
    	char   ExternDate2[31];
    	struct tm *pstDate ;
    	struct LIMIT *limit;
     
    	memset(DateChar, 0x00, 31);
    	memset(LocalTime, 0x00, 31);
    	limit=(struct LIMIT *)malloc(sizeof(struct LIMIT));
    	memset(limit, 0x00, sizeof(struct LIMIT));
     
    /* si les dates sont valorisees en parametres externes, on retient celles-la */	
     
        strcpy(ExternDate, ReadIni("DATE_EXTRACTION"));
        strcpy(ExternDate2, ReadIni("DATE_EXTRACTION_SUPERIEURE"));
        printf("Traitement avec dates forcees %s a %s \n", ExternDate, ExternDate2);
        strncpy(limit->limit_inf, ExternDate, 10);
        strncpy(limit->limit_sup, ExternDate2, 10);
     
        chk_date(limit->limit_inf);
        printf("limite %s \n", limit->limit_inf);
     
        intps = mktime(limit->limit_inf);
        printf("Date intps : %s \n", ctime(&intps));
        pstDate = localtime (&intps);
     
        printf(" DateChar %02d/%02d/%04d \n",
        				pstDate->tm_mday,
        				pstDate->tm_mon+1,   
                                    pstDate->tm_year+1900);
       return limit;
    Ce code est incomplet,il s'intègre dans un programme batch. A la suite de ce traitement, dans cette fonction, des calculs sont faits à partir de la date récupérée et de la variable NbJours

Discussions similaires

  1. Conversion de date
    Par jdu dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2005, 16h17
  2. Conversion de dates
    Par Gogoye dans le forum Modules
    Réponses: 5
    Dernier message: 10/08/2004, 11h39
  3. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  4. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 14h33
  5. Conversion de date et division 64 bits
    Par dway dans le forum Assembleur
    Réponses: 38
    Dernier message: 27/01/2004, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo