Sekunden Differenz zweier TDateTime ermitteln
-
Hi. Ich möchte in CBuilder5 (Oldie) von zwei TDateTime die Sekunden als Differenz ermitteln. Der Code hier gibt mir aber einen viel zu hohen Wert zurück. Wie ermittelt man den korrekten Wert? Danke!
TDateTime t1 = GetFileLastModified(FileName); TDateTime t2 = Now(); int diff = t2 - t1; Caption = IntToStr(diff);
-
Schau mal nach SecondSpan(). TDateTime speichert übrigens die Tage als ganzzahlige Werte, muesstest also durch 86400 dividieren, wenn Du die Sekunden manuell berechnen willst.
-
Das scheint es leider in CBuilder5 noch nicht zu geben.
-
Naja, dann den zweiten Weg
(t2 - t1) / 86400;
Hatte ich doch schon gesagt.
Edit: kompletter Blödsinn. Wieso ist der Wert zu groß? Muesste er nicht zu klein sein? Um die Sekunden zu ermitteln, musst Du den wert mit 86400 multiplizieren, zumindest in BCB6. Hast Du den Zeitstempel der Datei mal überprüft?
-
Zeitstempel der Datei ist "Heute, 17. Juni 2008, 15:44:26"
Spuckt immer 39616 aus...
TDateTime t2 = Now(); Caption = IntToStr(t2);
t1 sagt den selben Wert (war vorher falscher Pfad und hatte 0 ausgespuckt).
Wenn ich das in Sekunden berechne dann komme ich gerade auf so ungefährt 3754 (Sekunden). Da sich die 39616 nicht ändern, ist das wohl eh der falsche Weg.
Wie komme ich an die Sekunden von TDateTime ran? Find nichts in der Hilfe, oder bin blind.
-
Nein, TDateTime ist ein Fließkommawert. Der ganzzahlige Wert sind die Tage seit 1.1.1800 oder so, der gebrochene Wert sind die Zeitteile. 0.25 -> 1/4 des Tages, also 6.00 Uhr; 0,5 -> 12 Uhr, 1/86400=> eine Sekunde. Du schneidest mit IntToStr() des Zeitteil ab und bekommst somit nur die Tage (0, weil heute sich die Datei geändert hat). Also vllt sowas wie FloatToStr((t2 - t1) * 86400). Alternativ kannst Du Dir die Formattierungsfunktionen von tdatetime mal anschauen.
-
Oh stimmt. FloatToStr(t1) gibt Nachkommawert aus. Danke!
Bei int meckert compiler nicht, jedoch bei
float diff = (t2 - t1);
meint er:
E2015 Mehrdeutigkeit zwischen '_fastcall TDateTime::operator double() const' und '_fastcall TDateTime::operator int() const'
in float t2 und t1 casten bringt auch nichts. Kannst eventuell auch da weiterhelfen?
-
Nach der Fehlermeldung zu urteilen, gibt es nur Konvertierungsoperatoren nach <int> und <double> also mal testen:
FloatToStr(static_cast<double>(t2) - static_cast<double>(t1))
-
Einem double zuweisen?
Beschäftige dich mal mit Mehrdeutigkeitsauflösung.
-
Google gab mir super Lösung: http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc06005.php
Danke!