Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/12/2012, 10h18   #1
sp2308
Membre habitué
 
Inscription : décembre 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 337
Points : 112
Points : 112
Par défaut afficher difference entre 2 Tdatetime sous forme jj/mm/a..a hh:mm:ss

Bonjour

Je me perds dans tout ce qui est conversion de date.
j arrive à afficher la duree (en jour) entre deux dates mais apres pour la passer au format jj/mm/aaaa hh:mm:ss : Impossible !

j ai bien cherché du coté de EncodeDateTime (http://www.delphibasics.co.uk/RTL.as...EncodeDateTime) mais je ne crois pas que cela soit la bonne piste.
Je precise que j ai besoin de ce mode de calcul de difference entre les dates car je souhaite calculer une duree moyenne à la fin d un traitement.
un peu d aide serait la bienvenue.
d avance merci

mon code
Code :
1
2
3
4
5
6
7
date1 := strtodatetime(Ed_date_1.Text);
  date2 := strtodatetime(Ed_date_2.Text);
 
  diff := date2 - date1;
  Ed_diff_date.Text := FloatToStr(diff);
  diff := round(diff * 86400);
  ed_diff_datetime.Text := TimeToStr(diff / 24 / 3600);
ici TimeToStr(diff / 24 / 3600); ne correspond pas à mes attentes de conversion de Diff
sp2308 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h21   #2
Rayek
Modérateur
 
Avatar de Rayek
 
Homme
Développeur informatique
Inscription : mars 2005
Messages : 4 995
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
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 : 4 995
Points : 7 738
Points : 7 738
Dans l'uinité DateUtils il y a plein de fonctions qui permettent de gérer les dates et heures. genre SecondesBetween qui permet de connaitre le nombre de secondes entre deux dates.
__________________
Modérateur Delphi Combattez la brute
Aucune réponse aux sollicitations techniques par MP

Le guide du bon forumeur :__________
[Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3
Rayek est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 11h23   #3
popo
Membre émérite
 
Avatar de popo
 
Homme Jérémy
Analyste programmeeur Delphi / C#
Inscription : mars 2005
Messages : 732
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Analyste programmeeur Delphi / C#
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2005
Messages : 732
Points : 976
Points : 976
Un simple Format sur le résultat de Date2-Date1 ne fonctionnerait-il pas ?
popo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 14h22   #4
sp2308
Membre habitué
 
Inscription : décembre 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 337
Points : 112
Points : 112
Citation:
Envoyé par popo Voir le message
Un simple Format sur le résultat de Date2-Date1 ne fonctionnerait-il pas ?
Le pb est que je me retrouve avec un resultat du type 1.57 et que là je ne sais pas comment le formater....
sp2308 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 15h00   #5
Rayek
Modérateur
 
Avatar de Rayek
 
Homme
Développeur informatique
Inscription : mars 2005
Messages : 4 995
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
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 : 4 995
Points : 7 738
Points : 7 738
Un code que j'ai fait il y a pas mal de temps qui retourne formaté heures/minutes/secondes/millisecondes

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function FormatMS(MilliSecondes: Cardinal): string;
var
  Hour, Min, Sec: Cardinal;
begin
  Hour := MilliSecondes div 3600000;
  MilliSecondes := MilliSecondes mod 3600000;
  Min := MilliSecondes div 60000;
  MilliSecondes := MilliSecondes mod 60000;
  Sec := MilliSecondes div 1000;
  MilliSecondes := MilliSecondes mod 1000;
  Result := Format('%.2d:%.2d:%.2d:%.3d', [Hour, Min, Sec, MilliSecondes]);
end;
En utilisation

Code :
1
2
3
 
MilliSecondes := MiliisecondesBetWeen(Date1, DAte2);
Showmessage(FormatMS(Millisecondes));
__________________
Modérateur Delphi Combattez la brute
Aucune réponse aux sollicitations techniques par MP

Le guide du bon forumeur :__________
[Projet en cours] Des unités pour faciliter l'utilisation d'indy : EasyIndy 1.3
Rayek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 15h01   #6
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 967
Points : 9 967
Salut

Essayer d'appliquer un format de Date (jj/mm/aaaa hh:mm) sur une durée n'est pas approprié, car une durée n'est pas une date.

1,57 est la différence exprimée en jours entre tes deux dates (donc une durée).
1,57 => 1 jour 13 heures et 40 minutes.
Code :
1
2
3
4
5
6
7
8
9
10
function FormatDuree(D: Extended): string;
var
  j, h, m: Integer;
begin
  j := Trunc(D);
  h := Trunc(Frac(D) * 24);
  m := Trunc(Frac(Frac(D) * 24) * 60);
 
  result := Format('%dj %dh %dmn', [j, h, m]);
end;
PS: Y'a peut-être plus simple pour le calcul, mais le principe est là.

[edit] Te voilà avec deux exemples: celui de Rayek qui travaille avec des millisecondes (Cardinal), ou le mien avec une différence entre deux TDateTime (Double).

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 16h57   #7
sp2308
Membre habitué
 
Inscription : décembre 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 337
Points : 112
Points : 112
Merci à vous
sp2308 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h27.


 
 
 
 
Partenaires

Hébergement Web