patterncppModerate
Getting current time with milliseconds
Viewed 0 times
millisecondswithgettingtimecurrent
Problem
I am looking for a more efficient or shorter way to achieve the following output using the following code:
Sample output:
current time: 2012-05-16 13:36:56:396
I would prefer not to use any third-party library like Boost.
timeval curTime;
gettimeofday(&curTime, NULL);
int milli = curTime.tv_usec / 1000;
time_t rawtime;
struct tm * timeinfo;
char buffer [80];
time(&rawtime);
timeinfo = localtime(&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.
Solution
When you call
an important note to be considered is that functions like
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(&curTime, NULL);
int milli = curTime.tv_usec / 1000;
char buffer [80];
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&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.Code Snippets
timeval curTime;
gettimeofday(&curTime, NULL);
int milli = curTime.tv_usec / 1000;
char buffer [80];
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec));
char currentTime[84] = "";
sprintf(currentTime, "%s:%03d", buffer, milli);
printf("current time: %s \n", currentTime);Context
StackExchange Code Review Q#11921, answer score: 12
Revisions (0)
No revisions yet.