Вы можете использовать localtime () для преобразования time_t (секунд с начала эпохи) в сломанный экземпляр struct tm (или, скорее, localtime_r, который является поточно-ориентированным).Наконец, используйте strftime () для форматирования строк.(Нет необходимости использовать ctime в любом месте).Например,
#include <time.h>
...
time (&rawtime);
struct tm foo;
struct tm *mytm;
mytm = localtime_r (&rawtime, &foo);
char outstr[200];
strftime(outstr, sizeof(outstr), "%H:%M:%S", mytm);
...
Обработка ошибок, исправление потенциальных (тривиальных) ошибок, преобразование в std :: string и т. Д. Оставлено в качестве упражнения для читателя