Getting current time with milliseconds I am looking for a more efficient or shorter way to achieve the following output using the following code:

timeval curTime;
gettimeofday(&amp;curTime, NULL);
int milli = curTime.tv_usec / 1000;

time_t rawtime;
struct tm * timeinfo;
char buffer [80];

time(&amp;rawtime);
timeinfo = localtime(&amp;rawtime);

strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);

char currentTime[84] = "";
sprintf(currentTime, "%s:%d", buffer, milli);
printf("current time: %s \n", currentTime);


Sample output:


  current time: 2012-05-16 13:36:56:396


I would prefer not to use any third-party library like Boost.
When you call gettimeofday it gives you the number of seconds since EPOCH too, so you don't need to call time again. And when you use output of localtime as input of strftime, you may omit the intermediate variable (not a very useful point though). So your code could be written like:

timeval curTime;
gettimeofday(&amp;curTime, NULL);
int milli = curTime.tv_usec / 1000;

char buffer [80];
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&amp;curTime.tv_sec));

char currentTime[84] = "";
sprintf(currentTime, "%s:%03d", buffer, milli);
printf("current time: %s \n", currentTime);


an important note to be considered is that functions like localtime are not thread-safe, and you'd better use localtime_r instead.