boost posix_time
-
Hallo Gemeinde,
ich möchte mit Boost Date Time die aktuelle Systemzeit auslesen, und in dieses Format umwandeln: HH:MM:SS jedoch bekomme ich das nicht hin.
#include "boost/date_time/gregorian/gregorian.hpp" #include "boost/date_time/posix_time/posix_time.hpp" #include <iostream> int main() { using namespace boost::posix_time; ptime now = microsec_clock::local_time(); time_duration tod = now.time_of_day(); std::cout << tod.hours() << ':' << tod.minutes() << ':' << tod.seconds() << std::endl; return 0; }Jedoch bekomme ich da zum Beispiel 1:2:0 raus, in einem Log-File sieht das doof aus, wenn die werte < 10 sind nur einstellig sind. Eine wünschenswerte Ausgabe wäre demnach 01:02:00. Die konvertationen "to_simple_string" etc. Sind auch nicht geeignet da dort die Fractional seconds angehängt werden.
Kann mir jemand sagen wie ich das Ausgabeformat anpassen kann?
Danke für die Hilfe.
so long
jd
-
schau mal nach den manipulatoren setw und setfill.
http://www.cplusplus.com/reference/iostream/manipulators/
-
Gibt auch noch I/O Möglichkeiten von Boost.DateTime:
http://www.boost.org/doc/libs/1_39_0/doc/html/date_time/date_time_io.htmlGrüssli
-
Hi,
danke schonmal für eure Hilfe, ich habe mich jetzt fast den ganzen Tag mit boost date_time befasst und bin zu keinem entschluss gekommen, konnte mein Problem nicht lösen, ich vermute mal das date_time für solche lapalen sachen ungeeignet ist. Oder hat da jemand noch einen Lösungsvorschlag?
ich das jetzt so gelöst:
#include <ctime> #include <fstream> #include <iostream> using namespace std; int main() { time_t now = time(0); char timestamp[22]; strftime(timestamp, 22, "%H:%M:%S", localtime(&now)); std::cout << timestamp << std::endl; return 0; }Damit funktioniert das was ich will mit nur ein paar zeilen Code, entweder geht das nicht mit boost, was ich will oder es wäre zu Overkill.
so long
jd
-
@jd,
Das einfachste wäre, wenn du statt microsec_clock die second_clock verwenden würdest:#include <boost/date_time/posix_time/posix_time.hpp> #include <iostream> int main() { using namespace boost::posix_time; ptime now = second_clock::local_time(); time_duration tod = now.time_of_day(); std::cout << tod << std::endl; return 0; }Falls du bei deinen Mikrosekunden bleiben möchtest, sie aber nicht ausgeben möchtest, dann musst du sie vor der Ausgabe entfernen. Zum Beispiel auf diese Weise:
#include <boost/date_time/posix_time/posix_time.hpp> #include <iostream> int main() { using namespace boost::posix_time; ptime now = microsec_clock::local_time(); time_duration tod = now.time_of_day(); tod -= microseconds(tod.fractional_seconds()); std::cout << tod << std::endl; return 0; }Aber du kannst es natürlich auch auf deine Art und Weise machen, wenn du dabei unbedingt auf Boost.DateTime verzichten und auf C Lösungen setzen willst.
Grüssli
-
Danke für die Hilfe, das funktioniert, nun kann die C-Variante wieder verwerfen, die war nur dafür da damit es überhaupt funktioniert.