Sekunden in Datum umrechnen
-
Hallo,
ich hab als Aufgabe während meiner momentanen Ausbildung ein Programm zu schreiben welches eine Lichtschranke ausliest. Funktionieren soll das folgendermaßen, man gibt die Startzeit fest im Programm an, beispielsweise 14:00:00 und eine Zweite Zeit wird beim aktivieren der Lichtschranke gespeichert. Daraus wird dann die Differenz berechnet und dann die Zeit Ausgegeben.
Das Zeitnehmen, und die Differenz berechnen klappt auch soweit, aber wie kriege ich nun den Wert in Sekunden den mir difftime zurück gibt wieder in eine normale Zeitangabe mit Stunden, Minuten und Sekunden umgerechnet? Würde mich sehr freuen wenn mir hier jemand helfen kann. Schonmal im vorraus vielen Dank für eure Hilfe.
Hier noch der Code des Programms wie es bisher aufgebaut ist:
{ SYSTEMTIME systime; char szBuffer[30] = { 0 }; GetLocalTime( &systime ); wsprintf( szBuffer , "%d:%d:%d",systime.wHour,systime.wMinute,systime.wSecond); char* startzeit; int sec_h = systime.wHour*60*60; int sec_m = systime.wMinute*60; int time1 = sec_h+sec_m+systime.wSecond; startzeit = tb_startzeit->Text.c_str(); int sz_h, sz_m, sz_s; int nCnt = sscanf(startzeit, "%d:%d:%d", &sz_h, &sz_m, &sz_s); int sec2_h = sz_h*60*60; int sec2_m = sz_m*60; int time2 = sec2_h+sec2_m+sz_s; double dif; dif = difftime(time1, time2); int time3 = 0; time3 = (dif/60)/60; Edit1->Text=time1; Edit2->Text=time3; }
-
Hallo
TDateTime?!
Deine Vorgehensweise passt eher ins Ansi-C Forum.
bis bald
akari
-
Danke für die schnelle antwort. Wenn ich mich im Forum vertan habe, tut mir leid, war mir nicht so wiorklich sicher weil ich das genannte Programm ja mit dem Borland C++ Builder 6 erstellt habe.
Naja ich hab schon mit jeder Menge Möglichkeiten rumgespielt, aber keine hat wirklich zum erfolg geführt das ich aus den Sekunden eine einfache Zeitangabe im Format 00:00:00 kriege, mag auch daran liegen das mir durchaus die nötige Erfahrung mit C++ fehlt
-
Hallo
Wenn du im Builder mit der VCL arbeitest dann verwende auch alles was sie beinhaltet. Mit TDateTime kannst u nämlich hervorragend rechnen. Mach ein leeres Projekt auf, stell 3 TDateTimePicker rein, stell bei jedem die Eigenschaft Kind auf dtkTime und schreib für den Buttonevent diese eine zeile :
void __fastcall TForm1::Button1Click(TObject *Sender) { DateTimePicker3->Time = DateTimePicker2->Time - DateTimePicker1->Time; }
Das ist alles was du für die Rechnung brauchst. Eventuell mußt du noch von String in TDateTime oder umgekehrt umwandeln, wenn du für die Ein- und Ausgabe nicht TDateTimePicker verwendest. Auch die aktuelle Systemzeit ist mit TDateTime leicht abgefragt. Steht alles in der Builder-Hilfe zu TDateTime. Es gibt keinen Grund die veraltete C-Funktionen zu verwenden.
bis bald
akari
-
Danke erstmal für die durchaus sehr Hilftreiche Antwort. Das ich es auf die von mir beschriebene Art und Weise gemacht habe, liegt einfach daran das dies dir Art war, auf die wir während 2 Jahren Fachabi eigentlich fast alles gemacht haben, von den im C++ Builder integrierten möglichkeiten haben wir dort nahezu garkeine genutzt oder kennengelernt.
Nun, das berechnen ist somit ja wirklich einfach geworden, jedoch wird hier ja die Uhrzeit über die Eingabemasdke des DateTimePickers ein gegeben, in meinem Fall sollte sie aber ja vom Programm gesetzt werden, jedenfalls die Zeit, welche die Lichtschranke misst, nur die Startzeit sollte ja eine Eingabe von Hand sein.
Ich habe jedoch trotz durchschauen der Builder Hilfe bisher nichts gefunden wie ich dem DateTimePicker eine Uhrzeit zuweisen kann, von Programmseite her. Muss jedoch auch zugeben das ich nicht wirklich weiß nach was ich da eigentliche suchen sollte. Ein kleiner Tipp sollte hier womöglich schon reichen
Edit: Also im normalfall sollte es natührlich reichen die Systemzeit zu benutzen, aber gibt wohl auch fälle wo ich beispielsweise die Uhrzeit aus einer Variablen heraus an den DateTimePicker übergeben möchte.
MfG
Nico
-
Hallo
Wenn eine Uhrzeit nicht vom User direkt eingegeben werden soll, dann ist TDateTimePicker auch nicht das richtige. Stattdesen solltest du dann direkt TDateTime verwende.
TDateTime a(0, 10, 30, 500); // Zeit : 0 Stunden, 10 Minuten, 30 Sekunden, 500 ms TDateTime b("10:30"); // Zeit : 10 Stunden, 30 Minuten
bis bald
akari
-
Hey, also das hat soweit alles Prima funktioniert
Vielen Dank dafür ersteinmal.
Was ich leider trotz der Builder Hilfe nicht gefunden habe ist eine möglichkeit die aktuelle Systemzeit bei einem bestimmten Event zu "speichern" und damit dann zu rechnen.
Beispiel: Benutzer gibt über den DateTimePicker eine Uhrzeit ein, drückt auf einen Button, nun wird die Zeit zum Zeitpunkt des Button klicks gespeichert und die Differenz aus beiden Zeiten ausgegeben. Hoffe ihr könnt mir hierbei nochmal helfen.
MfG
Nico
-
Probiers mal hiermit:
TDateTime jetzt=Now();
Gruß
Hawk