Autor Beitrag
DerNetteNachbar
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Fr 06.03.09 15:38 
Grüsse euch,
wie ihr schon aus dem Thread Titel erkennen könnt geht es um Zeit. Und zwar möchte ich die Zeit berechnen die mir bei einer Datenbankabfrage verbleibt bzw. die Gesamtzeit daraus errechnen.
Zur Verfügung habe ich die Gesamtanzahl Datensätze, die abgearbeiteten Datensätze, die abgelaufene Zeit.
Hab es bereits versucht mit dem Dreistaz zu rechnen, leider kommen da falsche Zahlen raus.
Wäre nett wenn einer mir helfen könnte.

MfG

Nachbar
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 06.03.09 15:58 
Moin!

Das ist relativ einfach, lade dir einfach die Komponente TFluxCompensator von www.futurecomponents.net runter, die kann das. Gibt auch glaube ich eine deutsche Übersetzung, heißt TWahrsagen... :roll: :zwinker:

Das geht nicht, woher willst du genau wissen, wie lange etwas dauert, solange der Vorgang noch läuft. Das kann man nur schätzen. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 06.03.09 15:59 
Einfaches Rechenbeispiel: 60 von 200 Datensätzen in 30 Sekunden.
200 DS / 100 % = 2 ( => 1 % von Gesamt)
60 DS / 2 = 30 (=> 30 % Fortschritt)
30 Sec. / 30 % * 100 = 100 (=> 100 Sekunden für 100 %)

Wobei das wie bereits gesagt ja nur Näherungswerte sein können, die sind so aussagefähig wie die Schätzwerte, die der Explorer bei Dateioperationen anzeigt.
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Fr 06.03.09 16:15 
An DeddyH: kannst du mir bitte dein Beispeil etwas näher erläutern.

MfG
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 06.03.09 16:52 
Ist doch ganz einfach: Du teilst die Gesamtanzahl der Datensätze durch 100, damit erhältst Du den Wert, der einem Prozent entspricht. Durch diesen teilst Du nun die Anzahl der abgearbeiteten Datensätze und erhältst den bisherigen Fortschritt in Prozent. Durch diese Zahl teilst Du nun die bislang benötigte Zeit. Heraus kommt dabei ein Prozent der geschätzten Gesamtzeit, welches Du nun nur noch mit 100 multiplizieren musst.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 06.03.09 17:12 
Gesamtanzahl Datensätze: N
abgearbeitete Datensätze: n
abgelaufene Zeit: t(n)

=> Restzeit ~= t(n) / n * (N-n)

-------------------------------

Beispiel:
N = 100
n = 10
t(n) = 20 sec

=> Restzeit ~= 20 sec / 10 * (100 - 10) = 2 sec * 90 = 180 sec

=> Gesamtzeit = 20 sec + 180 sec = 200 sec
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Fr 13.03.09 14:37 
Vielen Dank für die Formel, wirklich Super.
Jetzte geb ich das auf ein Label aus. Erstmal natürlich in Sekunden. Jetzt habe ich mir gedacht, konvertierst halt in Minuten. Gesagt, getan, hab ich des durch 60 geteilt. Allerdings kommt jetzte sowas wie 2,1 Minuten raus. Ist natürlich etwas Käse. Möchte das in dem Format haben 1 Minute, 30 Sekunden. Allerdings ist mir das bisher nicht gelungen.
MfG

Nachbar
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 13.03.09 14:43 
Schau dir mal FormatDateTime an, vielleicht hilft dir das.
Oder, wenn du händisch dividieren willst: div oder mod

Da dies aber nicht mehr viel mit der Restzeit selber, sondern eher mit der Formatierung der Ausgabe zu tun hat, solltest du einen neuen Thread aufmachen.

_________________
PROGRAMMER: A device for converting coffee into software.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 13.03.09 15:00 
Da dieses Unterforum sowohl zu Delphi als auch C# gehört, verweise ich auf TimeSpan.ToString mit passendem Argument (nicht DateTime). Jürgen
DerNetteNachbar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 224



BeitragVerfasst: Fr 13.03.09 15:19 
Hallo, hat sich bereits erledigt danke trotzdem für euere Mühe:
Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
m := s div 60;
if s >= 60 then
s := s - 60 * (s div 60) + 1;


MfG

Nachbar
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 13.03.09 16:46 
user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Hallo, hat sich bereits erledigt

Naja, um 13.37 Uhr hatte es sich noch nicht erledigt. Woher hätten wir bis 14.18 Uhr erraten sollen, dass Dich unsere Antworten nicht mehr interessieren?

Übrigens sind Standard-Formatierungsbefehle immer besser: Wenn Du bei der nächsten Aufgabe Stunden oder Millisekunden berücksichtigen musst, fängst Du mit einer neuen Routine an. Eine Format-Anweisung gilt allgemein.

Jürgen