@maksqwe

Конвертация даты from char to time_t?

Здравствуйте.


Появилась необходимость конвертнуть из char массива вида(dd.mm.yy) в числовой формат time_t (в переменной которой хранится секунды начиная с 1 января 1970г до нужной нам даты).


Подскажите как корректно и вообще возможно ли это сделать. Допустив что изначально в массиве дата корректно описана. Или избавиться от time_t и заменить другим форматом, просто с ним мне легче в данном случае работать… было )


Просто, если подсчитывать секунды разницы между 1970 и заявленным в массиве годом, то корректно не получится, точнее будет множество проверок и лишнего кода, так как надо учитывать высокосные года. Тоже самое и с днями и месяцами.
  • Вопрос задан
  • 5473 просмотра
Решения вопроса 1
ertaquo
@ertaquo
На просторах интернета видел такую функцию:
long CMine::ConvertDateTime(CString buff)
{
int yy, mm, dd, hour, min, sec;
struct tm when;
long tme;

sscanf(buff, "%d/%d/%d %d:%d:%d", &mm, &dd, &yy, &hour, &min, &sec);

if( yy < 70 ) yy+= 100; // year 2000 compliant
time(&tme);
when = *localtime(&tme);
when.tm_year = yy; when.tm_mon = mm-1; when.tm_mday = dd;
when.tm_hour = hour; when.tm_min = min; when.tm_sec = sec;
return( mktime(&when) );
}

Источник
Написано не совсем красиво, но суть примерно понятна.
Строка с датой и временем парсится через sscanf и из нее извлекаются числа. Если год меньше 70, то он относится к 21 веку и надо прибавить 100 лет (так как time_t начинается с 1 января 1970 года). Далее все это записываем в структуру tm и с помощью функции mktime преобразовываем в time_t. Минус данного способа — он не будет работать со строками, содержащими дату в некорректном формате.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
WNeZRoS
@WNeZRoS
Из строки можно парсить в struct tm (для не windows систем, есть strptime), а из tm сделать time_t можно при помощи time_t mktime(struct tm * timeptr)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы