Je sais que cela peut être simple mais étant C++, je doute que ce le sera. Comment convertir une chaîne de forme 01/01/2008 en date afin de pouvoir la manipuler? Je suis heureux de casser la corde aux électeurs jour mois année. Aussi heureux si la solution est uniquement Windows.
#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *tm);
Je l'ai compris sans utiliser strptime
.
Décomposez la date en ses composantes, à savoir jour, mois, année, puis:
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
peut maintenant être converti en un time_t
et être manipulé.
Vous pouvez essayer Boost.Date_Time Input/Output .
Pour tous ceux qui recherchent strptime()
pour Windows, la source de la fonction elle-même est nécessaire pour fonctionner. Le dernier code NetBSD ne porte malheureusement pas facilement à Windows, malheureusement.
J'ai moi-même utilisé l'implémentationici(strptime.h et strptime.c).
Un autre morceau de code utile peut être trouvéici. Cela vient à l'origine de Google Codesearch, qui n'existe plus.
J'espère que cela économise beaucoup de recherche, car il m'a fallu un bon bout de temps pour le trouver (et aboutissait le plus souvent à cette question).
#include <time.h>
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int main ()
{
time_t rawtime;
struct tm * timeinfo;
int year, month ,day;
char str[256];
cout << "Inter date: " << endl;
cin.getline(str,sizeof(str));
replace( str, str+strlen(str), '/', ' ' );
istringstream( str ) >> day >> month >> year;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
timeinfo->tm_year = year - 1900;
timeinfo->tm_mon = month - 1;
timeinfo->tm_mday = day;
mktime ( timeinfo );
strftime ( str, sizeof(str), "%A", timeinfo );
cout << str << endl;
system("pause");
return 0;
}
Pourquoi ne pas opter pour une solution plus simple en utilisant boost
using namespace boost::gregorian;
using namespace boost::posix_time;
ptime pt = time_from_string("20150917");
La bibliothèque POCO a une classe DateTimeParser qui pourrait vous aider avec cela. http://www.appinf.com/docs/poco/Poco.DateTimeParser.html
Vous pouvez utiliser la librairie boost (multiplateforme)
#include <stdio.h>
#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;
}
Mais le format devrait être comme mentionné :)