




#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *tm);
Разобрался без использования strptime.
Разбейте дату на компоненты, то есть день, месяц, год, а затем:
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 теперь можно преобразовать в time_t и манипулировать им.
Для всех, кто ищет strptime() для Windows, для работы требуется исходный код самой функции. К сожалению, последний код NetBSD нелегко перенести в Windows.
Я сам использовал реализацию здесь (strptime.h и strptime.c).
Еще один полезный фрагмент кода можно найти здесь. Это происходит из Google Codesearch, которого больше не существует.
Надеюсь, это сэкономит много времени на поиске, так как мне потребовалось довольно много времени, чтобы найти это (и чаще всего в конечном итоге на этом вопросе).
#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;
}
Вы можете использовать библиотеку Boost (кросс-платформенная)
#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;
}
Но формат должен быть таким :)
Почему бы не выбрать более простое решение с помощью Boost
using namespace boost::gregorian;
using namespace boost::posix_time;
ptime pt = time_from_string("20150917");
Работает хорошо .. С небольшими изменениями это должно быть лучшим ответом