Boost: time_to_string
-
Hallo,
ich muss eine Zeit in einen String umwandeln und wieder zurück. Zuerst hab ich das so gemacht:void stringToTime(std::string timestr){ const char *datum=timestr.c_str(); strptime( datum, "%a %b %d %H:%M:%S %Y", &this->start ); } std::string timetostring(){ tm* tmptr = &this->start; time_t tmp = mktime ( tmptr ); std::string timestr = ctime (&tmp); timestr=account::ReplaceString("\n","",timestr); return timestr; }Das hat unter linux einwandfrei funktioniert. Jetzt wollte ich es für Windows compilen, und das geht nicht weil MS strptime nicht implentiert hat

Deswegen hab ich zu boost gegriffen:#include "stdafx.h" #include <boost/date_time/posix_time/posix_time.hpp> using namespace boost::posix_time; tm StringToTime(std::string timestr){ ptime t(time_from_string(timestr)); tm pt_tm = to_tm( t ); return pt_tm; } int _tmain(int argc, _TCHAR* argv[]) { std::string ts1("2002-01-20 23:59:59.000"); std::string ts2("Mon May 31 12:22:03 2010"); StringToTime(ts1); //Funktioniert StringToTime(ts2); //Funktioniert nicht system("pause"); }Wenn das Format von oben (2002-01...) kommt der Fehler:
Unbehandelte Ausnahme bei 0x7c81eb33 in boost.exe: Microsoft C++-Ausnahme: boost::exception_detail::clone_impl<boost::exception_detail::error_info_injectorboost::bad\_lexical_cast > an Speicherposition 0x0012f2c0..
Wie kann ich mit time_to_string andere Zeit Formate umwandeln. Ich brauche das unbedingt weil ctime eben genau dieses Www Mmm dd hh
ss yyyy umwandelt...
Hat jemand eine Idee?
-
[MOP] schrieb:
Hat jemand eine Idee?
Ja. Doku von boost.Date Time lesen und mit den mitgelieferten I/O-Funktionena rbeiten:
http://www.boost.org/doc/libs/1_43_0/doc/html/date_time/date_time_io.html
-
Habs mir angeschaut, aber das sind irgendwie zu viele Informationen auf einmal, ich blick da nicht durch

Kann mir jemand ein kleines Beispiel geben, wie ich einen string mit dem Format Www Mmm dd hh
ss yyyy in so ein ptime Objekt speichern kann...?
So hab ichs versucht... funktioniert übehaupt nicht, es kommt immer not_a_date_time...int main(){ using namespace boost::gregorian; using namespace boost::posix_time; using namespace boost::local_time; using namespace std; /****** basic use ******/ date d(not_a_date_time); // stringstream ss; ss << "Mon May 31 12:22:03 2010"; ptime pt(not_a_date_time); cout << pt << endl; // "not-a-date-time" ss >> pt; cout << pt << endl; // "2004-Feb-29 12:34:56.000789" }
-
Damit bist du genau auf der ersten Seite des IO-Tutorials angelangt. Ein oder zwei seiten weiter werden die facets erklärt, mit denen du das Format für den Input vom default abändern kannst. (Wie dir die Kommentare schon zeigen ist das Forma, was du rein gibst ein anderes, als standardmäßig genutzt wird)