Преобразовать строку в дату в C++
Я знаю, что это может быть просто, но, будучи C++, я сомневаюсь, что так и будет. Как мне преобразовать строку в форме 01.01.2008 в дату, чтобы я мог манипулировать ею? Я счастлив разбить нить на день, месяц, год, составляющие. Также рад, если решение только для Windows.
8 ответов
#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
и манипулировать.
Почему бы не пойти на более простое решение с использованием Boost
using namespace boost::gregorian;
using namespace boost::posix_time;
ptime pt = time_from_string("20150917");
#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;
}
Для всех, кто ищет strptime()
для Windows требуется источник самой функции для работы. Последний код NetBSD, к сожалению, не легко переносится на Windows.
Я сам использовал реализацию здесь (strptime.h и strptime.c).
Еще один полезный фрагмент кода можно найти здесь. Это происходит от Google Codesearch, который больше не существует.
Надеюсь, это сэкономит много времени на поиски, так как мне потребовалось немало времени, чтобы найти это (и чаще всего заканчивали этим вопросом).
Библиотека POCO имеет класс DateTimeParser, который может помочь вам в этом. http://www.appinf.com/docs/poco/Poco.DateTimeParser.html
Вы можете использовать библиотеку повышения (кроссплатформенный)
#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;
}
Но формат должен быть таким, как упомянуто:)