Sekunden ins Format "hh:mm:ss"
-
Nun, wie viele Sekunden hat denn eine Minute so? Und wieviele Sekunden hat eine Stunde?
Und dann gibt es noch so schöne Mathematikoperationen, namens Division (Ganzzahldivision, in C durch / repräsentiert) und modulo (Rest einer Ganzzahldivision, in C durch % repräsentiert). Wenn du noch syntaktischen Zucker oben drauf haben willst gibt es auch noch eine Funktion namens
divin der cstdlib, die beides gleichzeitig macht.
-
ganz so trivial ist es ja nicht, wenn man z.B. nicht weiß was ein ostringstream oder setfill und setw ist:
#include <sstream> #include <string> #include <iostream> #include <iomanip> struct hh_mm_ss { explicit hh_mm_ss( int sekunden ) : m_sekunden( sekunden ) {} friend std::ostream& operator<<( std::ostream& out, hh_mm_ss z ) { using std::setw; const char fillc = out.fill('0'); out << setw(2) << z.m_sekunden/3600 << ":" << setw(2) << (z.m_sekunden % 3600)/60 << ":" << setw(2) << z.m_sekunden % 60; out.fill( fillc ); return out; } private: int m_sekunden; }; int main() { using namespace std; int sek = 29301; cout << hh_mm_ss( sek ) << endl; // bzw. ostringstream buf; buf << hh_mm_ss( sek ); string sekform = buf.str(); // oder: sekform = boost::lexical_cast< string >( hh_mm_ss( sek ) ); return 0; }Ausgabe
08:08:21
-
Werner_logoff schrieb:
ganz so trivial ist es ja nicht, wenn man z.B. nicht weiß was ein ostringstream oder setfill und setw ist
Weiß jetzt nicht so recht, was das damit zu tun hat:
char zeit[] = "00:00:00"; int sekunden = 8566; int x; x = sekunden % 60; zeit[6] = x / 10 + '0'; zeit[7] = x % 10 + '0'; x = (sekunden / 60) % 60; zeit[3] = x / 10 + '0'; zeit[4] = x % 10 + '0'; x = (sekunden / 3600); zeit[0] = x / 10 + '0'; zeit[1] = x % 10 + '0';Ungetestet und nicht sehr performant, aber man braucht nichtmal C++-Kenntnisse dazu. Obwohl dass damit durchaus schöner geht...
Ich glaub, es gibt ne Time-Klasse, die sowas alles drin hat.
-
Ich dachte mir, dass es schon eine Time-Klasse gibt
und ich wollte dann diese benutzen.
Gibt es dazu ein Beispiel?
-
die gibts höchstens in boost. und glaub mir du willst dich nicht an den brocken boost binden nur für so eine minifunktionalität.
-
In der ctime stehen jede Menge Funktionen dafür. Da solltest du alles finden was du brauchst.
-
strftime (timestamp, 10,"%H:%M:%S", 29301);
Gruß Frank
-
Danke Frank!
Kannst Du mir bitte ein kleines Komplett-Beispiel geben?
Ich habe einen AnsiString mit den Sekunden "123".
Ich muss diese Sekunden nach char[] "00:00:00" wandeln.
-
lmgtfy(c++ strftime) 2.Treffer: http://www.imb-jena.de/~gmueller/kurse/c_c++/c_time.html
-
csofti schrieb:
Ich habe einen AnsiString
Borland / Codegear / Embarcadero IDE?
Dann versuchs doch mal mit dem VCL-Unterforum. Gibt nämlich schicke Funktionen in der DateUtils.hpp
mfg
xXx
-
naja csofti,
Ich habe einen AnsiString mit den Sekunden "123".
Dann musst du den string "123" noch in einen int wandeln:
'atoi' macht das dann für dich:
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/Ein Beispiel gebe ich dir nicht,
das käme programmieren gleich,
und das sollst du bitteschön selbst machen ...Gruß Frank