Thema: Delphi Dienstzeitende Rechner

Einzelnen Beitrag anzeigen

Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: Dienstzeitende Rechner

  Alt 3. Aug 2005, 16:19
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.
  Mit Zitat antworten Zitat