c实现日志时间字符串,可精确到微秒获取

    xiaoxiao2022-07-07  112

    代码如下:

    #include <stdarg.h> #include <time.h> #include <stdlib.h> #include <stdio.h> #define TIMEVAL_TO_STR_BUFFER_SIZE 37 int print_error(const char *format, ...) { int r; va_list l; va_start(l, format); vfprintf(stderr, format, l); r = fprintf(stderr, "\n"); fflush(stderr); va_end(l); return r; } void timeval_to_str(struct timeval *clock, char *const buffer) { struct tm result; localtime_r(&clock->tv_sec, &result); #if 0 sprintf(buffer, "d/d/d d:d:d.d", result.tm_year + 1900, result.tm_mon + 1, result.tm_mday, result.tm_hour, result.tm_min, result.tm_sec, (int)(clock->tv_usec / 100000) ); #else sprintf(buffer, "d/d/d d:d:d", result.tm_year + 1900, result.tm_mon + 1, result.tm_mday, result.tm_hour, result.tm_min, result.tm_sec ); #endif } double timeval_to_double(struct timeval *tv) { return ((double)(tv->tv_sec) + (double)(tv->tv_usec) * 0.000001); } void print_time_diff(void) { char datetime_buf[TIMEVAL_TO_STR_BUFFER_SIZE]; static double pre_time = 0.0; struct timeval tv; gettimeofday(&tv, NULL); timeval_to_str(&tv, datetime_buf); double current_time = timeval_to_double(&tv); if (pre_time) { double time_diff = current_time - pre_time; print_error("%s (diff .6lf)", datetime_buf, time_diff); } else { print_error("%s", datetime_buf); } pre_time = current_time; } int main(int argc, char *argv[]) { print_time_diff(); return 0; }

    运行结果:2019/05/22 07:20:04

    毫秒级别:2019/05/22 07:22:47.005

    微妙级别:2019/05/22 07:21:46.000001

    最新回复(0)