Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 09:10
Neee, ich hab mich zuerst verschätzt.
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)
$2B or not $2B
  Mit Zitat antworten Zitat