Discussion:
In Delphi zwei Zeiten vergleichen
(zu alt für eine Antwort)
Christian
2005-09-01 09:35:03 UTC
Permalink
Hallo Zusammen

Ich lese aus einer DB zwei Zeiten. Nun möchte ich den Zeitunterschied
der beiden Zeiten berechnen. Wie kann ich das in Delphi machen?

z.B. 1.Zeit = 13:17:52
2.Zeit = 13:19:55

-> Zeitunterschied = 00:02:03

Noch schöne wäre natürlich 2 Minuten 3 Sekunden.

Der Zeitunterschied ist immer unter einer Stunde.

Danke im voraus.

Freundliche Grüsse
Christian
Markus Gronotte
2005-09-01 09:37:52 UTC
Permalink
"Christian"
Post by Christian
Ich lese aus einer DB zwei Zeiten. Nun möchte ich den Zeitunterschied
der beiden Zeiten berechnen. Wie kann ich das in Delphi machen?
z.B. 1.Zeit = 13:17:52
2.Zeit = 13:19:55
StrToTime();
SecondsBetween();
Minutesbetween();

lg,

Markus - http://gronoworx.dyndns.org
Markus Gronotte
2005-09-01 09:53:40 UTC
Permalink
"Markus Gronotte"
Post by Markus Gronotte
Post by Christian
Ich lese aus einer DB zwei Zeiten. Nun möchte ich den Zeitunterschied
der beiden Zeiten berechnen. Wie kann ich das in Delphi machen?
z.B. 1.Zeit = 13:17:52
2.Zeit = 13:19:55
StrToTime();
SecondsBetween();
Minutesbetween();
Showmessage('Noch schöne wäre natürlich '+IntToStr(Minutesbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Minuten '+
IntToStr(Secondsbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Sekunden.');
NineBerry Schwarz
2005-09-01 10:02:34 UTC
Permalink
Hallo
Post by Markus Gronotte
Showmessage('Noch schöne wäre natürlich
'+IntToStr(Minutesbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Minuten
'+ IntToStr(Secondsbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+'
Sekunden.');
Denk nochmal drüber nach. So zählst du die Minuten doppelt.

Neun
Christian
2005-09-01 10:50:55 UTC
Permalink
Vielen Dank für die schnelle Antwort. Ist genau das was ich gesucht habe..

Gruess Christian
Post by Markus Gronotte
"Markus Gronotte"
Post by Markus Gronotte
Post by Christian
Ich lese aus einer DB zwei Zeiten. Nun möchte ich den Zeitunterschied
der beiden Zeiten berechnen. Wie kann ich das in Delphi machen?
z.B. 1.Zeit = 13:17:52
2.Zeit = 13:19:55
StrToTime();
SecondsBetween();
Minutesbetween();
Showmessage('Noch schöne wäre natürlich
'+IntToStr(Minutesbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Minuten '+
Post by Markus Gronotte
IntToStr(Secondsbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Sekunden.');
Markus Gronotte
2005-09-01 11:59:19 UTC
Permalink
"Christian"

Ist genau das was ich gesucht habe..
Post by Markus Gronotte
Post by Markus Gronotte
Showmessage('Noch schöne wäre natürlich
'+IntToStr(Minutesbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Minuten '+
Post by Markus Gronotte
IntToStr(Secondsbetween(StrToTime(Zeit2)-StrToTime(Zeit1)))+' Sekunden.');
Beachte aber den Einwand von NineBerry. Denn der
Code so wörtlich genommen ist falsch (zumal ...Between einen Realwert
liefert und keinen Integer) und zählt demnach doppelt.

lg,

Markus
Marian Aldenhövel
2005-09-01 10:08:41 UTC
Permalink
Hallo,
Post by Christian
z.B. 1.Zeit = 13:17:52
2.Zeit = 13:19:55
-> Zeitunterschied = 00:02:03
Noch schöne wäre natürlich 2 Minuten 3 Sekunden.
Den Zeitunterschied bekommst Du durch Subtraktion, die Einheit ist
dann Tage. Also musst Du einfach ein wenig umrechnen.

procedure IntervalToStr(Start,Ende:TDateTime):string;
var Intervall:extended;

procedure AddElement(title:string);
begin
if Result<>'' then Result:=Result+' ';
Result:=IntToStr(Trunc(Intervall))+title;
Intervall:=frac(Intervall);
end;

begin
Intervall:=Abs(Ende-Start);

AddElement('Tage');

Intervall:=Intervall*24;
AddElement('Stunden');

Intervall:=Intervall*60;
AddElement('Minuten');

Intervall:=Intervall*60;
AddElement('Sekunden');
end;
Post by Christian
Der Zeitunterschied ist immer unter einer Stunde.
Dann kannst Du das ja noch ein wenig verkürzen :-).

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn. +49 228 624013.
http://www.marian-aldenhoevel.de
"Never order the "Catch-O-The-Day" at a seafood restaurant
that is more than 800 miles from a large body of water."
Joe Galinke
2005-09-01 10:10:19 UTC
Permalink
Hallo Christian,
Post by Christian
Ich lese aus einer DB zwei Zeiten. Nun möchte ich den Zeitunterschied
der beiden Zeiten berechnen. Wie kann ich das in Delphi machen?
z.B. 1.Zeit = 13:17:52
2.Zeit = 13:19:55
-> Zeitunterschied = 00:02:03
Noch schöne wäre natürlich 2 Minuten 3 Sekunden.
Du hast also 2 mal .FieldByName(AFieldName).AsDateTime.

Ungetestet:

var
dT: TDateTime;
Days,
Hours,
Minutes,
Seconds: Double;
S: string;
begin
dT := .FieldByName(Zeit2).AsDateTime - .FieldByName(Zeit1).AsDateTime;

Days := Trunc(dT);
Hours := Frac(dT) * HoursPerDay;
Minutes := Frac(Hours) * MinsPerHour;
Seconds := Frac(Minutes) * SecsPerMin;

S := IntToStr(Trunc(Days)) + ' Tage, ' +
IntToStr(Trunc(Hours)) + ' Std., ' +
IntToStr(Trunc(Minutes)) + ' Min., ' +
IntToStr(Trunc(Seconds)) + ' Sek.';
end;



Gruß, Joe
--
Stefan Koschke
2005-09-01 13:11:58 UTC
Permalink
Hallo zusammen,
Post by Joe Galinke
Hallo Christian,
var
dT: TDateTime;
Days,
Hours,
Minutes,
Seconds: Double;
S: string;
begin
dT := .FieldByName(Zeit2).AsDateTime - .FieldByName(Zeit1).AsDateTime;
Days := Trunc(dT);
Hours := Frac(dT) * HoursPerDay;
Minutes := Frac(Hours) * MinsPerHour;
Seconds := Frac(Minutes) * SecsPerMin;
S := IntToStr(Trunc(Days)) + ' Tage, ' +
IntToStr(Trunc(Hours)) + ' Std., ' +
IntToStr(Trunc(Minutes)) + ' Min., ' +
IntToStr(Trunc(Seconds)) + ' Sek.';
end;
geht das nicht noch einfacher ?

var
Zeit1,Zeit2 : String;
t1,t2,tdiff : TDateTime;
begin
Zeit1 := '13:17:52';
Zeit2 := '13:19:55';

t1 := strtotime(Zeit1);
t2 := strtotime(Zeit2);
tdiff := t2-t1;
ShowMessage('Zeitdifferenz : ' + FormatDateTime('hh "Stunden" nn "Minuten"
ss "Sekunden"',tdiff));

Aber Achtung !
Alle vorgeschlagenen Varianten scheitern aufgrund des fehlenden Datums an
Zeit1= 23:59:00 und Zeit2 = 01:05:00 !

Ciao
Stefan
Joe Galinke
2005-09-01 14:47:39 UTC
Permalink
Hallo Stefan,
Post by Stefan Koschke
geht das nicht noch einfacher ?
[...]
Post by Stefan Koschke
ShowMessage('Zeitdifferenz : ' + FormatDateTime('hh "Stunden" nn "Minuten"
ss "Sekunden"',tdiff));
Stimmt. Aber das ist doch _zu_ einfach. ;-)
Post by Stefan Koschke
Aber Achtung !
Alle vorgeschlagenen Varianten scheitern aufgrund des fehlenden Datums an
Zeit1= 23:59:00 und Zeit2 = 01:05:00 !
Auch das ist wahr. Man hätte den OP darauf hinweisen müssen, besser mit
Zeitstempeln statt reinen Time-Werten zu arbeiten.

Gruß, Joe
--
Markus Gronotte
2005-09-06 11:34:46 UTC
Permalink
Zitat aus der OH:

"Mit SecondSpan können Sie die Differenz zwischen zwei TDateTime-Werten in Sekunden ermitteln. Im Unterschied zur Funktion
SecondsBetween, die nur ganze Sekunden berücksichtigt, meldet SecondSpan nicht vollständig verstrichene Sekunden gegebenenfalls als
Bruch."

Loading...