Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktion um zu ermitteln wieviel Zeit vergangen ist

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
01.10.2003, 08:50 Uhr
~Gast
Gast


Ich habe ein Program vorm Ende die aktuelle Systemzeit in eine Datei schreibt. Wenn das Program gestartet wird soll die aktuelle Uhrzeit mit der in der Datei verglichen werden und die Zeit zwisch beiden Werten in Sekunden ausgegeben werden. Meine Überlegung sieht bisher so aus:
Beispiel:
Zeit in Datei=10:20:30 = 10*360+20*60+30 = 4830s
Zeit Jetzt= 10:24:20 = 10*360+24*60+20 = 5060s
Vergangen= 5060-4830=230

Mein Problem ist jetzt aber folgendes:
Beipsiel:
Zeit in Datei=10:58:30 = 10*360+58*60+30 = 7110s
Zeit Jetzt= 11:04:20 = 11*360+4*60+20 = 4220s
Vergangen= 4220-7110=-2890 = etwa 8Stunden

Hat jemand ne Idee wie ich dies lösen kann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.10.2003, 09:36 Uhr
Pablo
Supertux
(Operator)


So, mir ist folgendes eingefallen:

Machen wir dein zweites Beispiel: Du kannst du Zeit in Stunden berechnen, das finde ich besser.

Zeit in Datei: 10:58:30 = 10+58/60+30/3600 = 10.975 Stunden seit 0:00:00 vergangen
Zeit Jetzt: 11:04:20 = 11+04/60+20/3600 = 11.072 Stunden seit 0:00:00 vergangen

Zeit Jetzt-Zeit Datei = 11.07222222 - 10.975 = 0.097222222222
Jetzt multipliziere das mit 3600 (um Sekunden auszurechnen) : 0.097222222222 * 3600 = 350

Also sind 350 (=0 Std, 5 Min. 50 Sek.) Sekunden vergangen. Von den 350 Sekunden wäre schon kein Problem, das in xx:yy:zz Format umzuwandeln.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 01.10.2003 um 09:37 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.10.2003, 09:42 Uhr
ao

(Operator)



Zitat:
~Gast postete
Ich habe ein Program vorm Ende die aktuelle Systemzeit in eine Datei schreibt. Wenn das Program gestartet wird soll die aktuelle Uhrzeit mit der in der Datei verglichen werden und die Zeit zwisch beiden Werten in Sekunden ausgegeben werden. Meine Überlegung sieht bisher so aus:
Beispiel:
Zeit in Datei=10:20:30 = 10*360+20*60+30 = 4830s
Zeit Jetzt= 10:24:20 = 10*360+24*60+20 = 5060s
Vergangen= 5060-4830=230

Mein Problem ist jetzt aber folgendes:
Beipsiel:
Zeit in Datei=10:58:30 = 10*360+58*60+30 = 7110s
Zeit Jetzt= 11:04:20 = 11*360+4*60+20 = 4220s
Vergangen= 4220-7110=-2890 = etwa 8Stunden

Hat jemand ne Idee wie ich dies lösen kann?


Der Faktor 360 ist falsch, es muss 3600 sein.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.10.2003, 09:43 Uhr
0xdeadbeef
Gott
(Operator)


Eine Stunde hat 3600 Sekunden, nicht 360.

--edit: Verdammt, da war wer schneller als ich...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 01.10.2003 um 09:43 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.10.2003, 09:46 Uhr
Pablo
Supertux
(Operator)


Jetzt habe ich deinen Fehler entdeckt.

Deine Umwandlung von Stunden in Sekunden ist falsch. Man muss mit 3600 multiplizieren und nicht mit 360, weil 60² = 3600. Guck hier genau hin.

Zitat:
~Gast postete
Mein Problem ist jetzt aber folgendes:
Beipsiel:
Zeit in Datei=10:58:30 = 10*3600+58*60+30 = 7110 39510s
Zeit Jetzt= 11:04:20 = 11*3600+4*60+20 = 4220 39860s
Vergangen= 4220-7110=-2890 = etwa 8Stunden 39860 - 39510 = 350 = etwa 0 Std. 5 Min. 50 Sek.

Hat jemand ne Idee wie ich dies lösen kann?[/i]



Bearbeitung:
Mist, @beefy und @ao waren auch schneller mit den 360 und 3600

--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 01.10.2003 um 09:48 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.10.2003, 09:48 Uhr
0xdeadbeef
Gott
(Operator)


Lustig. Das ist glaub ich, der größte Stapel äquivalenter Posts, den ich je gesehen habe. Jungs, wir müssen an unserem Scheduler arbeiten
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.10.2003, 10:49 Uhr
~Gast
Gast


Erstaml vielen Dank für die vielen und schnellen posts. Stimmt meine Umrechnung war wirklich falsch! Ich habe mich dafür entschieden das über den Vergleich mit 00:00:00 zu lösen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.10.2003, 11:04 Uhr
0xdeadbeef
Gott
(Operator)


Allerdings musst du so oder so noch den Tageswechsel abfangen. Wenn in der Datei was von 10 Uhr abends steht und du das Programm um 6 Uhr früh aufrufst, landest du auf die Art wieder in den Negativen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.10.2003, 11:21 Uhr
Pablo
Supertux
(Operator)



Zitat:
0xdeadbeef postete
Allerdings musst du so oder so noch den Tageswechsel abfangen. Wenn in der Datei was von 10 Uhr abends steht und du das Programm um 6 Uhr früh aufrufst, landest du auf die Art wieder in den Negativen.

Gut beobachtet , daran habe ich nicht gedacht
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.10.2003, 11:29 Uhr
ao

(Operator)


Wenn es nur drum geht, die Differenz zwischen zwei Zeitpunkten auszurechnen, ist es eigentlich Luxus, die Datei im menschenlesbaren Format "dd.mm.yy hh:mm:ss" zu schreiben und wieder zu lesen, das gibt nämlich ne Menge relativ unnützes Herumprogrammieren.

Wenn du das nicht gerade als Übung im Umgang mit fscanf siehst, könntest du alternativ die Standard-C-Funktion time () benutzen, die dir die Anzahl der verstrichenen Sekunden seit 1. Januar 1970 liefert. Wenn time_t (der Rückgabetyp von time()) auf deinem System ein long int ist, reicht das bis zum Jahr 2038.

Du schreibst dann einfach einen time_t ins File, liest ihn zurück und erhältst die Differenz zu Jetzt automatisch in Sekunden ohne das ganze Herumrechnen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: