![]() |
Millisekunden aus Time ausrechnen
Hi,
wie kann ich mathematisch Millisekunden aus einer Uhrzeit ausrechnen, wenn ich die Funktion Time benutze? Ich habe probiert mit DecodeTime
Delphi-Quellcode:
Leider bekomme ich falsche Ergebnisse
Present := Time;
DecodeTime(Present, Hour, Min, Sec, MSec); Sekunden:= (Hour * 3600) + (Min * 60) + Sec; Millisekunden := (Sekunden * 1000) + MSec; Bitte um Hilfe Gruß Muchacho |
Re: Millisekunden aus Time ausrechnen
in wie fern bekommst du falsche Ergebnisse? - Springen die illisekunden anstatt langsam hochzuzählen? - Das ist normal. Dafür ist Time einfach die falsche Methode. Ich würde dir dafür QueryPerformanceCounter() + QueryPerformanceFrequency() enmpfehlen. Damit kannman bis auf Millisekundenbasis runter. Wie genau der ist, zeigt die Frequenz (s^-1). Diese kann von Rechner zu Rechner unterschiedlich sein, liegt aber in den meisten Fällen über 1 Mio.
Bernhard Edit: Ist dein "Millisekunden" auch Int64 oder Single, Double, Extended? Alleine 1 Stunde macht 3,6 Mio mSek. Das ist mehr, als in einen Integer rein geht. Ein Cardinal würde das gerade so verkraften. -> Projektoptionen und Bereichsprüfung aktivieren. |
Re: Millisekunden aus Time ausrechnen
Zitat:
Oder anders gesagt: Ich versteh auch noch nicht, was du eigentlich erreichen willst. PS: Der Wert von Time in Millisekunden umgerechnte sprengt die Grenzen eines Interges. |
Re: Millisekunden aus Time ausrechnen
Ein Tag im TDateTime-System entspricht 1.0, also kann man das direkt in Millisekunden umrechnen.
Delphi-Quellcode:
Es gibt sogar irgendwo in Unit System oder SysUtils eine Konstante MILLISECONDS_PER_DAY (oder so ähnlich, kann gerade nicht nachschauen)
Present := Time;
Millisekunden := Present*{Stunden pro Tag}24 * {Min pro std}60 * {s pro Min}60 * 1000;
Delphi-Quellcode:
Millisekunden := Trunc(Time*MILLISECONDS_PER_DAY);
|
Re: Millisekunden aus Time ausrechnen
Zitat:
|
Re: Millisekunden aus Time ausrechnen
Neee, ich hab mich zuerst verschätzt. :mrgreen:
Ich hatte bei Time mit den gesamten Inhalt von Now gerechnet. (TTime ist 'ne Ableitung von TDateTime und im TDateTimePicker haben Time, Date und DateTime alle genau den selben Wert, weil da irgendwer die Trunc und Frac vergessen hat zu verbauen) Now = aktuell 40320,3775902315 *24*60*60*1000 = 3.483.680.623.796,0016 [0000032B 1B8BCCB3] hast also Recht: 0 <= Time < 1 entspricht 0 bis 86.399.999 [05265BFF] Also im Grunde sollte seine ursprüngliche Berechnung (siehe Post #1) korrekte Werte liefern:
Delphi-Quellcode:
var
Hour, Min, Sec, MSec: Word; Millisekunden: Cardinal; begin DecodeTime(Time, Hour, Min, Sec, MSec); Millisekunden := Hour * 3600000 + Min * 60000 + Sec * 1000 + MSec; Edit1.Text := FloatToStr(Millisekunden); end; OK, von der Logik her müßte man zwar erst die Word-Werte erweitern, weil dort wirklich nicht das Ergebnis reinpaßt, aber zum Glück erweitert Delphi dieses schon automatisch auf Integer/Cardinal, um einfacher über die Register damit rechnen zu können. (bei Int64-Zwischenergebnissen müßte diese aber manuell erweitern, über Type-Casts) Und Millisekunden darf natürlich nicht als Word deklariert sein, sonst wird das Ergebnis ja gekürzt. (die Deklaration wurde uns aber mal wieder unterschladen) |
Re: Millisekunden aus Time ausrechnen
Zitat:
Aber in einen signed 32-bit-Integer kriegt man das locker rein, der reicht ja von -2^31 bis 2^31 - 1 (−2.147.483.648 bis 2.147.483.647). |
Re: Millisekunden aus Time ausrechnen
@Matze: Moin und "1 Stunde = " ... ein Tag hat doch aber ein paar mehr davon?
|
Re: Millisekunden aus Time ausrechnen
Danke für Eure Hilfe :-D
Mein Datentyp war falsch (integer :oops: ) Jetzt ist alles in Ordnung Gruß Muchacho |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz