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