Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 Timestamps subtrahieren (https://www.delphipraxis.net/145222-2-timestamps-subtrahieren.html)

1carter1 26. Dez 2009 21:53


2 Timestamps subtrahieren
 
Hi,

Ich komme bei folgendem Problem nicht weiter:

Ich möchte 2 Timestamps subtrahieren (soweit kein problem) und dann möchte ich das ergebnis in Stunden ausgeben lassen.

Ich erzeuge Timestamps mit folgender Funktion, die ich im Internet gefunden habe:

Zitat:

const
UnixStartDate: TDateTime = 25569.0;


function DateTimeToUnix(ConvDate: TDateTime): Longint;
begin
Result := Round((ConvDate - UnixStartDate) * 86400);
end;
und dann eben

DateTimeToUnix(now);

so, bis hierher kein Problem, ich habe nun also 2 Timestamps sagen wir ich habe

1261867020

und

1261867852


nun subtrahiere ich diese wie folge:


rtime := 1261867852 - 1261867020;

das ergebnis ist dann

832

nun möchte ich diese 832 in der Form h:m:s anzeigen lassen, ich glaube das währen 0:8:32 (bin mir aber nicht ganz sicher hab so meine Probleme mit timestamps)

Und ich wollte euch fragen, ob ihr mir bei diesem Problem helfen könnt, wenn ich die sache falsch angehe sprich wenn man diese 832 überhaupt nicht umrechnen kann, dann würde ich mich über verbesserungsvorschläge freuen.

mfg carTer

Matze 26. Dez 2009 22:16

Re: 2 Timestamps subtrahieren
 
Hallo,

deine Timestamp-Differenz müsste dir die Zeit in Sekunden liefern. Die folgende Funktion wandelt dir die Sekunden in die gewünschte Darstellung um (hoffe ich):

Delphi-Quellcode:
function FormatSeconds(seconds: Integer): string;
var
  h, m, s: Integer;
begin
  s := (seconds) mod 60;
  m := (seconds div 60) mod 60;
  h := (seconds div 3600) mod 24;

  Result := Format('%.2d:%.2d:%.2d', [h, m, s]);
end;
Aufruf:

Delphi-Quellcode:
ShowMessage(FormatSeconds(832));
Nur kommt dann 00:13:52 heraus.

Wenn du die führenden Nullen nicht haben möchtest, da du sie bei dir weg gelassen hast, dann entferne alle ".2" aus der Funktion.

Grüße, Matze

1carter1 26. Dez 2009 22:19

Re: 2 Timestamps subtrahieren
 
ja, hatte mich nebenbei noch an ne eigene funktion gesetzt, wollte gerade schreiben, dass ichs hinbekommen habe, bei mir kommt auch 13:52 raus, meine funktion sieht ein bisschen "unschöner" aus als deine^^ hier ist sie:

Delphi-Quellcode:
function zeitumwandeln(diff: integer) : string;
var h,n,s: integer;
begin
h := diff div 3600;
diff := diff mod 3600;
n := diff div 60;
diff := diff mod 60;
s := diff;
result := inttostr(h)+':'+inttostr(n)+':'+inttostr(s);
end;
und 13:52 stimmt:

600 = 10min
240 = 4min
=> 232 = 3min 52 sek
10min + 3min+52sek = 13:52


Vielen dank dir^^

mfg varTer

[edit=Matze][quote]- durch [delphi]-Tags ersetzt. MfG, Matze[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz