AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Millisekunden aus Time ausrechnen

Ein Thema von Muchacho · begonnen am 22. Mai 2010 · letzter Beitrag vom 22. Mai 2010
Antwort Antwort
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#1

Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 00:25
Hi,

wie kann ich mathematisch Millisekunden aus einer Uhrzeit ausrechnen, wenn ich die Funktion Time benutze?

Ich habe probiert mit DecodeTime
Delphi-Quellcode:
  Present := Time;
  DecodeTime(Present, Hour, Min, Sec, MSec);
  Sekunden:= (Hour * 3600) + (Min * 60) + Sec;
  Millisekunden := (Sekunden * 1000) + MSec;
Leider bekomme ich falsche Ergebnisse

Bitte um Hilfe

Gruß

Muchacho
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 00:33
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.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 00:35
Zitat von Muchacho:
Leider bekomme ich falsche Ergebnisse
Was erwartest du denn für Ergebnisse?

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 00:37
Ein Tag im TDateTime-System entspricht 1.0, also kann man das direkt in Millisekunden umrechnen.
Delphi-Quellcode:
Present := Time;
Millisekunden := Present*{Stunden pro Tag}24 * {Min pro std}60 * {s pro Min}60 * 1000;
Es gibt sogar irgendwo in Unit System oder SysUtils eine Konstante MILLISECONDS_PER_DAY (oder so ähnlich, kann gerade nicht nachschauen)
Millisekunden := Trunc(Time*MILLISECONDS_PER_DAY);
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 07:57
Zitat von rollstuhlfahrer:
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.
Da musst Du Milli mit Mikro verwechselt und dich zudem verrechnet haben: Da der Tag 86.400 Sekunden hat, wären das 86.4 Mio Millisekunden oder aber 86.4 Mrd Mikrosekunden
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 08: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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 08:21
Zitat von alzaimar:
Zitat von rollstuhlfahrer:
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.
Da musst Du Milli mit Mikro verwechselt und dich zudem verrechnet haben: Da der Tag 86.400 Sekunden hat, wären das 86.4 Mio Millisekunden oder aber 86.4 Mrd Mikrosekunden
1 Stunde = 3.600 Sekunden = 3.600 * 1.000 Millisekunden = 3,6 Mio. Millisekunden. Das passt schon.

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).
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 08:25
@Matze: Moin und "1 Stunde = " ... ein Tag hat doch aber ein paar mehr davon?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Muchacho

Registriert seit: 9. Okt 2009
60 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Millisekunden aus Time ausrechnen

  Alt 22. Mai 2010, 16:44
Danke für Eure Hilfe

Mein Datentyp war falsch (integer )

Jetzt ist alles in Ordnung

Gruß

Muchacho
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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