ich würde entweder TDateTime oder TTimeStamp verwenden.
hier mal ein kleines beispiel, vielleicht kannst du damit was anfangen.
hinweis: wie du siehst, vergleiche ich aTimeStamp immer mit Now. Du musst now nur durch deine zweite Zeit ersetzen.
(ich weiß, ist nicht ideal, dass ich den TTimeStamp erst ins TDateTime format umwandle, aber ich hoffe du kannst dennoch daraus ableiten, wie man ein datum in tage usw. aufsplittet).
Delphi-Quellcode:
function GetDateTimeDiff(const aTimeStamp: TTimeStamp): String;
var
Days, Hours, Minutes, Secs: Integer;
DStr, HStr, MStr, SStr: String;
Difference: Double;
//LiesInPast: Boolean;
DaysStr, HoursStr, MinutesStr, SecsStr, FmtStr: String;
begin
Difference := TimeStampToDateTime(aTimeStamp) - Now;
Days := Round(Difference - Frac(Difference));
Difference := Frac(Difference) * 24;
Hours := Round(Difference - Frac(Difference));
Difference := Frac(Difference) * 60;
Minutes := Round(Difference - Frac(Difference));
Difference := Frac(Difference) * 60;
Secs := Round(Difference - Frac(Difference));
//LiesInPast := (Secs < 0);
if (Days > 1) or (Days < - 1) then
DaysStr := 'Tage'
else
DaysStr := 'Tag';
if (Hours > 1) or (Hours < - 1) then
HoursStr := 'Stunden'
else
HoursStr := 'Stunde';
if (Minutes > 1) or (Minutes < - 1) then
MinutesStr := 'Minuten'
else
MinutesStr := 'Minute';
if (Secs > 1) or (Secs < - 1) then
SecsStr := 'Sekunden'
else
SecsStr := 'Sekunde';
// Nullen voranstellen
DStr := IntToZeroStr(Days, 1);
HStr := IntToZeroStr(Hours, 1);
MStr := IntToZeroStr(Minutes, 2);
SStr := IntToZeroStr(Secs, 2);
// Vorzeichen erstellen: Negativ oder Positiv
if Secs < 0 then
FmtStr := '-'
else
FmtStr := '+';
// Wenn 0 Tage oder 0 Std. oder 0 Min dann nicht anzeigen
if Days <> 0 then
FmtStr := Format('%s %s %s', [FmtStr, DStr, DaysStr]);
if Hours <> 0 then
FmtStr := Format('%s %s %s', [FmtStr, HStr, HoursStr]);
if Minutes <> 0 then
FmtStr := Format('%s %s %s', [FmtStr, MStr, MinutesStr]);
if Secs <> 0 then
FmtStr := Format('%s %s %s', [FmtStr, SStr, SecsStr]);
Result := FmtStr;
end;
function IntToZeroStr(const Value, Digits: Integer): String;
var
tmpRes: String;
begin
if Value < 0 then
tmpRes := IntToStr(Value * - 1) else
tmpRes := IntToStr(Value);
while Length(tmpRes) < Digits do
tmpRes := '0' + tmpRes;
Result := tmpRes;
end;
edit: hier vielleicht noch was brauchbares:
Delphi-Quellcode:
type
TTimeStampFormat = (tsDate, tsTime, tsBoth);
function FormatTimeStamp(const aTimeStamp: TTimeStamp; TimeStampFormat: TTimeStampFormat): String;
begin
case TimeStampFormat of
tsDate: Result := FormatDateTime('dddddd', TimeStampToDateTime(aTimeStamp));
tsTime: Result := FormatDateTime('tt', TimeStampToDateTime(aTimeStamp));
tsBoth: Result := FormatDateTime('c', TimeStampToDateTime(aTimeStamp));
end;
end;
im grunde, wenn du nicht mit TTimeStamp arbeiten willst, kannst du mal nach EncodeDateTime, bzw. DecodeDateTime suchen. da findest du sicherlich auch einiges an info.