#include <sys/time.h> #include <time.h> #include <stdio.h> #include <iostream> #include <string.h> using namespace std; double difftimeval(const struct timeval *tv1, const struct timeval *tv2) { double d; time_t s; suseconds_t u; s = tv1->tv_sec - tv2->tv_sec; u = tv1->tv_usec - tv2->tv_usec; if (u < 0) --s; d = s; d *= 1000000.0; d += u; return d; } char* strftimeval(const struct timeval *tv, char *buf) { struct tm tm; size_t len = 28; localtime_r(&tv->tv_sec, &tm); strftime(buf, len, "%Y-%m-%d %H:%M:%S", &tm); len = strlen(buf); sprintf(buf + len, ".%06.6d", (int)(tv->tv_usec)); return buf; } char* getstimeval(char *buf) { struct timeval tv; struct tm tm; size_t len = 28; gettimeofday(&tv, NULL); localtime_r(&tv.tv_sec, &tm); strftime(buf, len, "%Y-%m-%d %H:%M:%S", &tm); len = strlen(buf); sprintf(buf + len, ".%06.6d", (int)(tv.tv_usec)); return buf; } //get system time void SendCentreTime(char* sCurDate) { struct tm *current_date; time_t seconds; time(&seconds); current_date = localtime(&seconds); memset(sCurDate, 0 , sizeof(sCurDate)); sprintf(sCurDate, "%04d%02d%02d%02d%02d%02d", current_date->tm_year+1900, current_date->tm_mon+1, current_date->tm_mday, current_date->tm_hour, current_date->tm_min, current_date->tm_sec); } long long GetMillSec() { long long nMillSec = 0; struct timeval tv; gettimeofday(&tv,NULL); nMillSec = (long long)tv.tv_sec * 1000; nMillSec += tv.tv_usec / 1000; return nMillSec; } int main(int argc, char *argv[]) { char buf[28]; char cDate[128] = {0}; struct timeval tv1; struct timeval tv2; long long tm = GetMillSec(); SendCentreTime(cDate); gettimeofday(&tv1, NULL); printf("%s/n", getstimeval(buf)); gettimeofday(&tv2, NULL); printf("%s/n", strftimeval(&tv1, buf)); printf("%s/n", strftimeval(&tv2, buf)); printf("%f/n", difftimeval(&tv2, &tv1)); return 0; }