Как работает структура tm (из time.h)?

Мне нужно создать структуру, в которой установлена ​​дата. Я кое-что погуглил и нашел tm structure из библиотеки time.h, но у меня возникли некоторые проблемы; Мне нужно напечатать некоторые даты в файле журнала, вот пример:

typedef struct tm* tm_;

...

void NEW_Job()
{
    time_t t;
    tm_ secs;
    t=time(NULL);
    secs=localtime(&t);
    add_QUEUEnode(generate_job());
    fprintf(f, "\n%d:%d.%d : New job created.", secs->tm_hour, secs->tm_min, secs->tm_sec);
}

Я действительно не знаю, где я не прав.

Заранее спасибо за помощь :)


person Lamberto Basti    schedule 06.05.2013    source источник
comment
Один из моих ответов касается использования этой структуры stackoverflow.com/questions/16164442/   -  person Dariusz    schedule 06.05.2013
comment
Ваш код выглядит нормально для меня. Что он делает неправильно?   -  person Fabio Ceconello    schedule 06.05.2013
comment
typedef struct tm* tm_; -- Скрывать типы указателей за typedefs, как правило, плохая идея. Отбросьте typedef и просто объявите struct tm *secs;   -  person Keith Thompson    schedule 06.05.2013


Ответы (2)


Точная ошибка была не там, а в другой строке кода, именно здесь:

void PCunload(int b)
{
    time_t t;
    tm_ secs;
    int hh, mm, ss;
    hh=(time(NULL)-n[b].start_time)/3600;
    mm=((time(NULL)-n[b].start_time)%3600)/60;
    ss=((time(NULL)-n[b].start_time)%3600)%60;
    t=time(NULL);
    secs=localtime(&t);
    n[b].job.priority=-1;
    -->>fprintf(f, "\n%d:%d.%d : PC number %d unloaded; elapsed time: %d:%d.%d", secs->tm_hour, secs->tm_min, secs->tm_sec, hh, mm, ss);
} 

Там я попытался сделать преобразование внутри функций printf, но что-то пошло не так... Приношу свои извинения!

person Lamberto Basti    schedule 06.05.2013
comment
Кажется, вам не хватает аргумента, который соответствует биту "PC number %d"... - person twalberg; 06.05.2013
comment
Не звоните time(NULL) несколько раз. Просто вызовите его один раз и сохраните значение в t, затем используйте t. Помимо неэффективности, вы рискуете сдвинуть часы между вызовами time(). - person Keith Thompson; 06.05.2013

strftime() может помочь вам распечатать дату и время в вашем любимом формате. Пожалуйста, взгляните на man strftime.

person rakib_    schedule 06.05.2013