Вы можете легко использовать sscanf()
или, возможно, strptime()
, если ваша система имеет его, для анализа полей день / месяц / год из буфера символов. Вы также можете поместить текст в std :: stringstream, а затем передать значения в числовые переменные, ala:
std::istringstream is("2010/11/26");
int year, month, day;
char c1, c2;
if (is >> year >> c1 >> month >> c2 >> day &&
c1 == '/' && c2 == '/')
{
// numeric date fields in year, month, day...
// sanity checks: e.g. is it really a valid date?
struct tm tm;
tm.tm_sec = tm.tm_min = tm.tm_hour = tm.tm_wday = tm.tm_yday = tm.tm_isdst = 0;
tm.tm_mday = day;
tm.tm_mon = month;
tm.tm_year = year;
time_t t = mktime(&tm);
struct tm* p_tm = localtime(&t);
if (p_tm->tm_mday == day && p->tm_mon == month && p->tm_year == year)
// survived to/from time_t, must be valid (and in range)
do something with the date...
else
handle date-like form but invalid numbers...
}
else
handle invalid parsing error...
Если у вас возникли трудности, вы должны попробовать их и опубликовать конкретные вопросы.