Konvertiert eine Zeichenfolge in ein Datum in C ++

Ich weiß, dass dies einfach sein kann, aber C ++ Ich bezweifle, dass es sein wird. Wie konvertiere ich eine Zeichenfolge in der Form 01.01.2008 in ein Datum, damit ich sie manipulieren kann? Ich bin glücklich, die Schnur in die Bestandteile des Tagesmonatsjahres zu brechen. Auch wenn Lösung nur Windows ist.

#include  

Ich habe es herausgefunden, ohne die Zeit zu strptime .

Zerlegen Sie das Datum in seine Bestandteile Tag, Monat, Jahr und dann:

 struct tm tm; time_t rawtime; time ( &rawtime ); tm = *localtime ( &rawtime ); tm.tm_year = year - 1900; tm.tm_mon = month - 1; tm.tm_mday = day; mktime(&tm); 

tm kann nun in eine time_t konvertiert und manipuliert werden.

Sie könnten Boost.Date_Time Input / Output versuchen.

Für alle, die für Windows nach strptime() suchen, muss die Quelle der function selbst funktionieren. Der neueste NetBSD-Code portiert leider nicht einfach auf Windows.

Ich selbst habe die Implementierung hier benutzt (strptime.h und strptime.c).

Ein weiterer hilfreicher Code kann hier gefunden werden . Dies stammt ursprünglich von Google Codesearch, das nicht mehr existiert.

Hoffe, das spart eine Menge Suche, da es eine Weile gedauert hat, bis ich das gefunden habe (und meistens bei dieser Frage gelandet bin).

Die POCO-Bibliothek verfügt über eine DateTimeParser-class, die Ihnen dabei behilflich sein kann. http://www.appinf.com/docs/poco/Poco.DateTimeParser.html

 #include  

Warum nicht eine einfachere Lösung mit Boost verwenden?

 using namespace boost::gregorian; using namespace boost::posix_time; ptime pt = time_from_string("20150917"); 

Sie können die Boost-Bibliothek nutzen (plattformübergreifend)

 #include  #include "boost/date_time/posix_time/posix_time.hpp" int main() { std::string strTime = "2007-04-11 06:18:29.000"; std::tm tmTime = boost::posix_time::to_tm(boost::posix_time::time_from_string(strTime)); return 0; } 

Aber das Format sollte wie erwähnt sein 🙂