Zitat von
Dax:
Ich sitze hier schon seit ein paar Stunden an einem verzwickten Problem..
Ich habe zwei TDateTime-Werte, die ich subtrahieren will. Beim normalen Verfahen (dt1 - dt2) kommen aber leider fehlerhafte Werte. Die beiden Werte sind
20-12-2004 15:51 und
20-12-2004 16:00. Die Datums/Zeitdifferenz, die ich suche, ist offensichtlich
0-0-0 00:09. Allerdings sagt Delphi mir, die Datumsdifferenz sei 1899 Jahre
Wie kann ich nun die beiden Werte subtrahieren, dass 0-0-0 00:09 herauskommt?
PS: Ich brauche
sowohl die Datumsdifferenz
als auch die Zeitdifferenz..
Es gibt keine
"Datumsdifferenz", sondern nur eine Differenz gemessen in Tagen und Bruchteilen von Tagen!!
Beispiel:
Delphi-Quellcode:
var
dt1, dt2 : TDateTime;
diff : Double;
tage : integer;
stunden : double;
begin
diff := dt1 -dt2;
ShowMessageFmt('Zeitdifferenz: %f Tage', [diff]);
// man kann die Tage auch in Tage und Stunden zerbrechen:
tage := trunc(diff);
stunden := (diff - tage)*24.0;
ShowMessageFmt('Zeitdifferenz: %d Tage & %f Stunden', [tage, stunden]);
// man kann das Spiel weitertreiben und die Zeitdifferenz noch in Minuten und Sekunden aufbrechen
// hausaufgabe :-)
end;
Wenn du eine Zeitdifferenz in Monaten und Jahren ausdrücken möchtest, kommst du schon in Schwierigkeiten;
denn wie lange soll der Monat sein (30 oder 31 Tage)?
Zeitdifferenzen zwischen 0.0 und 0.9999999999 kann man mit
TimeToStr umwandeln,
bei grösseren (oder nagativen!!!) Differenzen muss man erst die ganzen Tage rausrechnen.
Delphi-Quellcode:
diff := Abs(diff);
tage := trunc(diff);
rest := int(diff);
ShowMessageFmt('Zeitdifferenz: %d Tage & %s ', [tage, TimeToStr(rest)]);