下午写了这么一个函数
char* getdatetimestr() {
static char datetimestr[32] = {0};
static time_t last_update_time = 0;
struct timeval tv = {0};
gettimeofday(&tv, NULL);
time_t nowtime = tv.tv_sec;
if (nowtime != last_update_time) {
last_update_time = nowtime;
struct tm nowtm = {0};
localtime_r(&nowtime, &nowtm);
strftime(datetimestr, sizeof(datetimestr), "%Y-%m-%d %H:%M:%S", &nowtm);
}
snprintf(datetimestr+19, sizeof(datetimestr)-19, ".%06ld", tv.tv_usec);
return datetimestr;
}
返回的串类似 2015-07-17 18:51:06.709628
注意到其中有一个缓存的机制,对于同一秒的时间单位内,只格式化微秒的部分,复用秒和秒以左的字符串,这个优化的差别有多大呢,实测下来,在同一个机器上,不用这个优化,每秒大约 5 万次,用了这个优化,每秒大约 50 万次。