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

Langage Delphi Discussion :

Problème conversion temps


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut Problème conversion temps
    Bonjour,
    Je dois faire la conversion de chaine de temps (00:13:45.78) en TTime.

    Pour la chaine citer en exemple tout se passe bien avec la fonction StrToTime ou EncodeTime, mais quand l'heure dépasse 24h (29:24:45:68) il m'est impossible d'effectuer une conversion. (argument incorrect).

    J'ai vu dans l'aide que l'heure ne peut aller de 0-23.

    Je dois additionner des heures qui dépassent 24h comment faire ou quelle fonction dois-je utiliser ?
    Bye

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    déjà quel est le système qui te fournit des heures de ce style

    sinon tu peux utiliser :

    pour avoir le nombre de fois que tu as 24 dans l'heure bizarre (ca t'indique le nombre de jour aussi)

    et

    Pour avoir le reste (les heures supp).

    Exemple :

    - 29 Div 24 = 1
    - 29 Mod 24 = 5

    Donc 1 jour et 5h
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2004
    Messages : 149
    Points : 69
    Points
    69
    Par défaut
    non je ne veux pas que les heures soient transformées en jour.

    Si j'additionne 23:00:00.00 à 05:00:00.00 cela doit donner 28:00:00.00 et pas 1jour et 04:00:00.00

    le système : j'ai un format d'heure minute seconde centième hh:mm:ss.zzz

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Il faut faire comme dit Malatar, en tout cas pour faire des calculs intermédiaires.

    Une fois que tu auras le nombre de jours, tu pourras mettre ca dans une variable de type TDateTime, et effectuer les opérations que tu veux.

    En fait, il te faut construire 2 fonctions

    1. transformer ta chaine en une var. de type TDateTime
    2. transformer une var. de type TDateTime, en format string de ton format.

    entre les 2, tu peux profiter ainsi de toutes les fonctions sur les date/times de Delphi, y compris, additionner du temps, soustraire du temps...

    Bon code!
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Voilà comment je récupère une durée > 24 heures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
     hh,mm,ss,ms : word;
    begin
      DecodeTime(edit1.Time,hh,mm,ss,ms);
      FDuree := (hh * 60) + mm;
    end;
    Je suppose que pour faire l'inverse, il faut utiliser EncodeTime de la même manière.

    Isa
    Isachat

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème conversion temps
    Voici comment je procéde en utilisant Encodetime et Decodetime

    pour l'exemple ce code additionne 2 durées :
    26h18m32s102ms et
    27h43m29s901ms soit au total

    54h02m02s003ms


    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
    38
    39
    40
     
    Var
       t1,ttotal                      : tdatetime;
       hh,mm,ss,ms, jreport  : word;
     
    begin
    // encodage durée 1
    // introduction des données
    hh:= 26; mm:= 18; ss:= 32; ms:= 102;
    // report des périodes de 24 heures
    jreport:= hh div 24;
    // transformation temps excédant les périodes entières de 24 h
    t1:= encodetime(hh mod 24,mm,ss,ms);
    // ajout des périodes entières de 24 h
    t1:= t1 + jreport*24;
    ttotal:=t1;
     
    // encodage durée 2
    // introduction des données
    hh:= 27; mm:= 43; ss:= 29; ms:= 901;
    // report des périodes de 24 heures
    jreport:= hh div 24;
    // transformation temps excédant les périodes entières de 24 h
    t1:= encodetime(hh mod 24,mm,ss,ms);
    // ajout des périodes entières de 24 h
    t1:= t1 + jreport*24;
    // ajout au total
    ttotal:=ttotal+t1;
     
    // affichage du résultat
    // retenue du nombre de jours entiers (24h) contenu dans la variable
    jreport:= trunc(ttotal);
    // decodage de la partie excédant les jours entiers
    decodetime(ttotal,hh,mm,ss,ms);
    // ajout des jours entiers transformés en heures
    hh:=hh+jreport;
    // affichage du résultat dans un label
    label1.Caption:= inttostr(hh) + ' heures ' + inttostr(mm) + ' min ' + inttostr(ss) + ' sec ' + inttostr(ms) + ' millisec';
     
    end;

Discussions similaires

  1. [D7][Débutant] Problème conversion String <- TEdit
    Par _alex_ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/02/2006, 22h48
  2. Problème conversion float vers double
    Par jhenaff dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/01/2006, 10h39
  3. Delete cascade --> problème de temps de traitement
    Par celine31 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 11/01/2006, 12h03
  4. Réponses: 5
    Dernier message: 09/05/2005, 12h24
  5. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05

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