Ответ 1
#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *tm);
Я знаю, что это может быть просто, но С++ я сомневаюсь, что это будет. Как преобразовать строку в форму 01/01/2008 в дату, чтобы я мог ее манипулировать? Я рад сломать строку в день месяца. Также радует, что решение только для Windows.
#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.Date_Time Input/Output.
Для всех, кто ищет strptime()
для Windows, для этого нужен источник самой функции. К сожалению, последний код NetBSD не переносит в Windows.
Я сам использовал реализацию здесь (strptime.h и strptime.c).
Еще один полезный фрагмент кода можно найти здесь. Это происходит из Google Codesearch, который больше не существует.
Надеюсь, это экономит много поисков, так как потребовалось некоторое время, чтобы найти это (и чаще всего в этом вопросе).
В библиотеке POCO есть класс DateTimeParser, который может помочь вам в этом. http://www.appinf.com/docs/poco/Poco.DateTimeParser.html
#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
using namespace boost::gregorian;
using namespace boost::posix_time;
ptime pt = time_from_string("20150917");
Вы можете использовать библиотеку ускорения (кросс-платформу)
#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;
}
Но формат должен быть указан как:)