Time in String konvertieren
-
Hi,
ich habe so eine Methode, die mir aktuelle Zeit liefert:void CEineKlasse::ShowTime() { SYSTEMTIME time; GetLocalTime (&time); cout << time.wDay << "-"; cout << time.wMonth << "-"; cout << time.wYear << " "; cout << time.wHour << ":"; cout << time.wMinute << ":"; cout << time.wSecond << " "; return ; }
und ein Auruf dieser Methode:
CEineKlasse object; object.ShowTime();
Ich möchte dann object.ShowTime() in einen string konvertieren. Wie könnte man das machen?
Und die Ausgabe der Zeit gefällt mir nicht: 2008-1-22 15:3:1. Ich möchte etwa so eine Ausgabe: 2008-01-22 15:03:01. Wie kann man das formatieren? Wo kann man schauen?
-
CString::Format
-
So weit ich verstehe, muss ich dann 'printf()' benutzen. Ich brauche aber unbedingt 'cout'...
-
Wozu brauchst du cout, wenn die Ausgabe nicht im Konsolenfenster landen soll? Wenn du unbedingt den obigen Aufbau der Funktion beibehalten willst, könntest du dir ja mal die std::istringstream Klasse ansehen.
-
Hi,
die Aufbau der Funktion brauche ich nicht unbedingt. Hauptsache, dass ich im 'cout' die aktuelle Zeit ausgebe. Jetzt kann ich meine SchowTime() vor 'cout' setzen und die Zeit wird ausgegeben, danach Ausgabe von 'cout'. Das passt. Aber das Format passt nicht ganz. Und ich brauche etwas wie Zeitstempel, bin nicht sicher, dass ich es richtig nenne. An einer bestimmten Stelle soll die aktuelle Zeit zu einem String hinzugefügt werden, d.h. muss selber ein String sein.
-
Und wo ist da das Problem? Hast du schonmal versucht, die Formatierungsmöglichkeiten von cout voll auszureizen? (wenn ich deine Soll- und Ist-Vorgaben so vergleiche, könne da setfill() und setwidth() recht hilfreich sein)
-
setw() steht für eine Ausgabebreite, mit setfill() kann man z.B. die Leerzeichen verändern. Wie kann ich das benutzen? Begreife nicht.
-
Ganz einfach: mit setw() bestimmst du, wie lang die einzelnen Bestandteile deiner Ausgabe mindestens werden sollen, mit setfill() legst du das Füllzeichen fest, mit dem kürzere Ausgaben auf die erforderliche Länge gebracht werden:
void CEineKlasse::ShowTime() { SYSTEMTIME time; GetLocalTime (&time); cout << setfill('0');//Füllzeichen 0 - gilt bis auf Widerruf cout << setw(2) << time.wDay << "-";//Ausgabe mit 2 Zeichen - gilt nur für den nächsten Wert ... cout << setfill(' ');//Füllzeichen zurücksetzen (Primitivlösung) return ; }
(Achtung: Im Gegensatz zu anderen Formatflags gilt setw() nur für den nächsten Wert, der ausgegeben werden soll)
-
Toll!
Wie kan man die aktuelle Zeit in ein string einpacken?
-
Indem du dir anstelle von cout einen "ostringstream sout;" nimmst und alle Elemente dort reinschreibst - am Ende kannst du dir den fertigen String mit "sout.str()" geben lassen.