Autor |
Beitrag |
Mike19
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: Di 15.03.11 11:02
Hallo Gemeinde,
hab mal wieder eine Frage.
Über 2 Maskedit werden Zeiten im Format hh:mm eingelesen. Wie kann ich nun die Diifferenz der beiden Werte berechnen und in einem Label, oder Maskedit wieder ausgeben.
Ich stehe hier auf dem Schlauch.
Danke
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 15.03.11 11:03
Dir könnten hier die Funktionen StrToDate oder StrToDateTime helfen. Mit diesen kannst du dann weiterrechnen.
Für diesen Beitrag haben gedankt: Mike19
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 15.03.11 11:15
Glaube StrToTime geht auch. Mit der Funktion MinutesBetween erhälts du die differenz der beiden Zeitwerte.
Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Mike19 
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: Di 15.03.11 11:21
Danke, es lag am Formatierungsstring der Ausgabe. Manchmal ist eben Luft im Kopf.
|
|
Mike19 
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: Fr 18.03.11 11:57
Nun die nächste Frage dazu.
Wie kann ich bei Berechnungen mit diesen Timewerten Rundungsfehler ausschliesen.
Beispiel
garz:=StrToTime(Maskedit74.Text)-StrToTime(Maskedit1.Text);
ergibt bei 14:30 - 06:00 =08:29, müsste aber doch 08:30 sein ?
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Fr 18.03.11 12:15
Mike19 hat folgendes geschrieben : | Wie kann ich bei Berechnungen mit diesen Timewerten Rundungsfehler ausschliesen. |
Rechne in Minuten um und arbeite dann damit. Stichworte: DecodeTime und EncodeTime
|
|
Pepp3r
      
Beiträge: 82
|
Verfasst: Fr 18.03.11 15:38
Schreib eine funktion
Delphi-Quelltext 1:
| function GetZeitDifferenz(zeit1, zeit2: Time): String |
in der du Stunden/Minuten/Sekunden aus der Uhrzeit parst. Dann kannst du die differenz errechenen, zusammensetzen und ausgeben.
--- Moderiert von Narses: Beiträge zusammengefasst---
So zum Beispiel:
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: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask;
type TForm1 = class(TForm) MaskEdit1: TMaskEdit; MaskEdit2: TMaskEdit; Label1: TLabel; procedure FormCreate(Sender: TObject); function GetZeitDif(zeit1, zeit2: TTime): String; private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin MaskEdit1.Text := TimeToStr(Time); MaskEdit2.Text := TimeToStr(Time); Label1.Caption := GetZeitDif(Time,Time) end;
function TForm1.GetZeitDif(zeit1, zeit2: TTime): String; var a, b, c: String; i: Word; arr: Array of Integer; begin a := TimeToStr(zeit1); b := TimeToStr(zeit2);
setLength(arr, 3);
arr[0] := StrToInt(a[1]+a[2])-StrToInt(b[1]+b[2]); arr[1] := StrToInt(a[4]+a[5])-StrToInt(b[4]+b[5]); arr[2] := StrToInt(a[7]+a[8])-StrToInt(b[7]+b[8]);
c := IntToStr(arr[0])+':'+IntToStr(arr[1])+':'+IntToStr(arr[2]);
result := c;
end;
end. |
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Fr 18.03.11 18:44
|
|
Pepp3r
      
Beiträge: 82
|
Verfasst: Fr 18.03.11 20:13
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
ich weiß nicht genau worauf du hinaus willst, aber ich glaube du meinst, dass nicht die richtige zeit-differenz errechnet wird. war auch nich von mit beabsichtigt, der author hat nur nach einer differenz gefragt.
aber auch dieses problem wäre ein leichtes zu lösen.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Fr 18.03.11 20:42
Pepp3r hat folgendes geschrieben : | der author hat nur nach einer differenz gefragt. |
Die Frage, was Mike19 mit Differenz gemeint hatte, ist doch eindeutig. Siehe seinen Beitrag von heute 10:57 Uhr.
So würde ich es machen: 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:
| procedure TMainform.Button2Click(Sender: TObject); var a : string; b : string; Zeit1 : TTime; Zeit2 : TTime; Std : Word; Min : Word; Sek : Word; MSek : Word; Sekunden : Integer; begin a := '01:37:02'; b := '00:58:19'; Zeit1 := StrToTime(a); Zeit2 := StrToTime(b);
DecodeTime(Zeit1, Std, Min, Sek, MSek); Sekunden := (Std * 3600) + (Min * 60) + Sek; DecodeTime(Zeit2, Std, Min, Sek, MSek); Sekunden := Sekunden - ((Std * 3600) + (Min * 60) + Sek); Std := Sekunden div 3600; Min := (Sekunden - (Std * 3600)) div 60; Sek := Sekunden - (Min * 60); Zeit1 := EncodeTime(Std, Min, Sek, 0); Edit1.Text := TimeToStr(Zeit1); end; |
Man kann das ganze noch optimieren (z. B. TDatetime verwenden, eine Funktion daraus machen usw.). Das überlasse ich aber Euch.
Für diesen Beitrag haben gedankt: Mike19
|
|
Mike19 
      
Beiträge: 256
Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
|
Verfasst: So 20.03.11 10:33
Danke Gerd, klappt wunderbar.
|
|