Структура timeval к печатаемому формату

Вы могли помочь мне как к формату a struct timeval экземпляр к человекочитаемому формату как "01.01.2010 15:35:10.0001"?

27
задан unwind 9 March 2010 в 12:37
поделиться

3 ответа

Преобразуйте tv_sec, используя localtime, и strftime, затем добавьте часть tv_usec.

13
ответ дан 28 November 2019 в 04:15
поделиться

Для преобразования даты и времени в строку можно использовать функцию strftime.

1
ответ дан 28 November 2019 в 04:15
поделиться

Вам необходимо вручную добавить микросекунды, поскольку это не в структуре struct tm , с которой работает strftime (). Вот фрагмент:

struct timeval tv;
time_t nowtime;
struct tm *nowtm;
char tmbuf[64], buf[64];

gettimeofday(&tv, NULL);
nowtime = tv.tv_sec;
nowtm = localtime(&nowtime);
strftime(tmbuf, sizeof tmbuf, "%Y-%m-%d %H:%M:%S", nowtm);
snprintf(buf, sizeof buf, "%s.%06ld", tmbuf, tv.tv_usec);

Обратите внимание, как мы используем явную точность 06 , чтобы получить заполненное нулями поле микросекунд. Поскольку микросекунды идут от 0 до 999 999, они всегда должны быть дополнены до 6 цифр. Мы не хотим вводить в заблуждение, например 57 микросекунд как 570 000 (сравните «1,57» с «1,000057»).

64
ответ дан 28 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: