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

Delphi Discussion :

Calcul en fonction de l'heure courante


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut Calcul en fonction de l'heure courante
    salut a tous,

    Dans un projet, j'ai des TEdits dans lequel des resultats de calcul sont obtenuset pour la saisie de données
    Dans la meme From, j'ai un TTimer, deux TDateTimePicker (un pour afficher la date courante et l'autre pour afficher l'heure courante.

    Dans un TEdit je saisi une date sous la forme JJ/MM/AAAA je voudrais savoir si c'est possible calculer la difference de jours entre les 2 dates puis le resultats le transformer en heure.

    Je me suis rapprocher du tuto qui avais etais mis dans un post Difference entre 2 date mais j'ai une erreur de type
    Argument incorrect pour l'encodage de date.

    je essayer d'utiliser DateToStr mais toujours le meme refrain

    Quelles sont ses arguments incorrect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      Date1, Date2 : TDateTime; 
      Diff : Extended; 
      Jour1, Mois1, Annee1 : Word; 
      Jour2, Mois2, Annee2 : Word; 
    begin 
      Date1 := EncodeDate(Annee1, Mois1, Jour1); 
      Date2 := EncodeDate(Annee2, Mois2, Jour2); 
      Diff := DaysBetween(Date2, Date1); 
      Edit1:=DateToStr(Diff); 
    end;
    Je pense qu'apres avoir la valeur de Diff il faudra que je la multiplie par 24 pour l'exprimer en heure mais là aussi j'ai un message d'incompatibilité entre TDate et String .

    J'ai rechercher dans l'aide F1, mais je n'ai pas trouver la solution

    merci pour votre coup de main

  2. #2
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    Personnellement pour soustraire 2 dates j'utilise juste:
    Ensuite ton DateToStr(Diff) devrait passer.

    @+.

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    Citation Envoyé par stefano
    s
    Dans un TEdit je saisi une date sous la forme JJ/MM/AAAA je voudrais savoir si c'est possible calculer la difference de jours entre les 2 dates puis le resultats le transformer en heure.
    Pourquoi récupérer le nombre de jours puis le transformer en heure, alors qeu tu peux avoir directement le résultat en heures avec HoursBetween ?


    Citation Envoyé par Aide Delphi
    HoursBetween Routine

    Renvoie le nombre d'heures entières séparant deux valeurs TDateTime spécifiées.

    Unité
    DateUtils

    Syntaxe


    [Delphi] function HoursBetween(const ANow: TDateTime, const AThen: TDateTime): Int64;

    Description
    Appelez HoursBetween pour obtenir la différence, en heures, entre deux valeurs TDateTime. HoursBetween ne compte que les heures entières. Ainsi, HoursBetween renvoie 0 pour la différence entre 9h00 et 9h59mn59s car il manque une seconde pour que la différence soit d'une heure.

    Rubriques associées

    HourSpan
    DaysBetween
    MillisecondsBetween
    MinutesBetween
    MonthsBetween
    SecondsBetween
    WeeksBetween
    YearsBetween
    WithinPastHours
    Modérateur Delphi

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

  4. #4
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Ce qui m'interpelle dans ton code c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Diff : Extended;
    ...
    Edit1:=DateToStr(Diff);
    TDateTime est un double, donc DateToStr devrait en toute logique accepter un double (codé sur 8 octets) sans trop sourcilier, mais pas un extended (codé sur 10 octets, donc trop "gros").

    Et encore... si si ta différence (donc la valeur de DIff) est comprise entre 0 et -1, tu risque d'avoir un souci :
    Citation Envoyé par la rubrique TDateTime de l'aide delphi
    Il n'existe pas de valeur TDateTime entre –1 et 0
    Au mieux, tu rajoutes une valeur absolue
    mais là encore ton résultat sera faussé puisqu'en fait :
    une valeur de 0 pour ton Diff sigifiera 30/12/1899 12:00 am pour la fonction DateToStr.

    En fait, ce que tu dois comprendre, c'est que TDateTime est un réel, la partie entière représente un nombre de jours et la partie réelle une fraction de jour.

    Du coup, le calcul est facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nombre de secondes entre de dates=Diff*24*3600;
    Nombre d'heures entre de dates=Diff*24;//24 heures par Jours
    etc...

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    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 236
    Par défaut
    En plus il y a une autre erreur dans son code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
    Date1, Date2 : TDateTime;
    Diff : Extended;
    Jour1, Mois1, Annee1 : Word;
    Jour2, Mois2, Annee2 : Word;
    begin
    Date1 := EncodeDate(Annee1, Mois1, Jour1);
    Date2 := EncodeDate(Annee2, Mois2, Jour2);
    Diff := DaysBetween(Date2, Date1);
    Edit1.text:=DateToStr(Diff);
    end;
    Modérateur Delphi

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

  6. #6
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Citation Envoyé par Malatar
    En plus il y a une autre erreur dans son code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Edit1.text:=DateToStr(Diff);
    end;
    Et en plus nous sommes tous passés à côté comme des nouilles !
    Bravo Malatar !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    merci a tous pour c'est info,

    je vais tester ça voir si je m'en sort avec toutes ses infos

    Pour ce qui est aussi de l'erreur pour Edit1.text c'est un oubli de ma part lors de la redaction du post. Mais bon je vais quand meme verifier dans le code source pouvoir si je n'ai pas fait l'erreur.

    Merci encore une fois a tous et je vous tiens au courant

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    salut,

    Alors là j'en perds mon latin
    procedure TForm1.UpdateClick(Sender: TObject);
    var Date2, Date1 : TDate;
    Heure1, Heure2 :TTime;
    Diff : Double;
    HeureDiff : Double;
    begin
    Date1:=DateActuel.Date;
    Date2:=DateVisite.Date;
    Diff := HourSpan (Date1,Date2);
    Edit1.text:=FloatToStr(Diff);

    Heure1:=HeureActuel.Time;
    Heure2:=HeureVisite.Time;
    HeureDiff:=hoursBetween(Heure1,Heure2);
    Edit2.Text:=FloatToStr(HeureDiff);

    end;
    Pour le calcul de différence de date ça marche très bien mais par contre pour la difference d'heure ça marche pas
    J'ai pour une difference 1h comme resultat 478 Qu'est que j'ai raté sur ce coup
    HeureActuel et HeureVisite sont des TDateTimePicker ayant pour propriété Kind dtkTime

    Qu'est qui n'est pas coherant dans mon code s'il vous plait ??

  9. #9
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.UpdateClick(Sender: TObject);
    ......
    
    HeureDiff:=hoursBetween(Heure1,Heure2);
    Edit2.Text:=DateTimeToStr(HeureDiff);
    end;
    ou DateTimeToString

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    Salut, et merci pour ta reponse.

    J'ai 00:00:00 pour resultat

    pourquoi tant de haine !!!!!!!!!!!!!!!


    a plus

  11. #11
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    tu utilise les 2 DateTimePicker pour l'heur ou pour les date??

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 420
    Par défaut
    salut,

    j'utilise 2 TDataTimePicker pour la date et 2 autres pour l'heure

    a plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Fonction calcule le nombre de demi-heures
    Par bigltnt dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2007, 15h31
  2. [Formule]Probleme Fonction Rang et heure calculée
    Par fredouf dans le forum Excel
    Réponses: 1
    Dernier message: 18/04/2007, 12h26
  3. [XML-XSLT-PHP] Récupération de l'heure courante dans xml
    Par mamat- dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 05/08/2005, 16h02
  4. Action en fonction de l'heure
    Par combattant dans le forum ASP
    Réponses: 3
    Dernier message: 17/12/2003, 17h22
  5. requete en fonction de l'heure
    Par matberry dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/06/2003, 22h53

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