Есть ли стандартная функция преобразующая строку типа "DD/MM/YYYY" в переменную типа time_t
????
Здравствуйте, tanex, Вы писали:
T>Есть ли стандартная функция преобразующая строку типа "DD/MM/YYYY" в переменную типа time_t
T>????
COleDateTime::ParseDateTime() не подойдет? А там и в time_t можно преобразовать...
<< RSDN@Home 1.1.2 stable >>
Здравствуйте, tanex, Вы писали:
T>Есть ли стандартная функция преобразующая строку типа "DD/MM/YYYY" в переменную типа time_t
T>????
Вот так можно SYSTEMTIME преобразовать в time_t, ну а получить SYSTEMTIME из "DD/MM/YYYY" уже несколько проще

:
SystemTimeToTimet(LPSYSTEMTIME psd, time_t *t)
{
struct tm tm_str;
// Вот тут можно попробовать получить реальное значение флага перехода на зимнее время,
// мне почему-то оно не понадобилось. Похоже в сочетании с функцией обратного преобразования
// проканывало и так, но поскольку времени разбираться не было - дед-лайн висел, то ответа толком
// не знаю до сих пор :-)
tm_str.tm_isdst = -1;
if(psd->wYear >= 1970)
{
tm_str.tm_year = psd->wYear - 1900;
tm_str.tm_mon = (psd->wMonth) -1;
tm_str.tm_mday = psd->wDay;
tm_str.tm_wday = psd->wDayOfWeek;
}
else
{
tm_str.tm_year = 70;
tm_str.tm_mon = 0;
tm_str.tm_mday = 2;
tm_str.tm_wday = 0;
}
tm_str.tm_hour = psd->wHour;
tm_str.tm_min = psd->wMinute;
tm_str.tm_sec = psd->wSecond;
tm_str.tm_yday = 0;
time_t lt = mktime(&tm_str);
if(lt==-1) *t = 0;
else *t = lt;
}
И до кучи — функция обратного преобразования.
TimetToSystemTime(time_t t, LPSYSTEMTIME psd)
{
struct tm *tmp_str = localtime(&t);
// См. комментарий выше
tmp_str->tm_isdst = 0;
psd->wYear = tmp_str->tm_year +1900;
psd->wMonth = tmp_str->tm_mon + 1;
psd->wDay = tmp_str->tm_mday;
psd->wDayOfWeek = tmp_str->tm_wday;
psd->wHour = tmp_str->tm_hour;
psd->wMinute = tmp_str->tm_min;
psd->wSecond = tmp_str->tm_sec;
psd->wMilliseconds = 0;
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, tanex, Вы писали:
T>Есть ли стандартная функция преобразующая строку типа "DD/MM/YYYY" в переменную типа time_t
T>????
В линуксе есть функция strptime. К сожалению, или к счастью

в винде такой нет.
Здравствуйте, tanex, Вы писали:
T>Есть ли стандартная функция преобразующая строку типа "DD/MM/YYYY" в переменную типа time_t
T>????
ну и на закуску boost::date_time есь такая библа