我使用这段代码在c / c++中获得了以微秒为单位的时间戳。但看起来不像微秒。我也不知道是否有格式化的方法。

timeval curTime;
gettimeofday(&curTime, NULL);
int milli = curTime.tv_usec / 1000;
unsigned long micro = curTime.tv_usec*(uint64_t)1000000+curTime.tv_usec;

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

char currentTime[84] = "";
char currentTime2[80] = "";
sprintf(currentTime, "%s:%3d", buffer, milli);
sprintf(currentTime2, "%s:%Lu", buffer, micro);
printf("time %s, hptime %s\n", currentTime, currentTime2);

什么是正确的输出格式?谢谢!

最佳答案

亚秒级的典型打印格式使用小数点指示符(在许多语言环境中为.),因此59英寸和几秒钟可能看起来像59.00013。

您创建的micro变量将使用当前的微秒计数,将其乘以1000000,然后再次添加当前的微秒计数;我希望您打算单独使用微秒计数,或者与秒计数一起使用:

unsigned long micro = curTime.tv_usec*(uint64_t)1000000+curTime.tv_usec;

应该写成
unsigned long micro = curTime.tv_sec*(uint64_t)1000000+curTime.tv_usec;

将秒和微秒数相加在一起

要将其写入输出,您可以考虑更改行
sprintf(currentTime2, "%s:%Lu", buffer, micro);


sprintf(currentTime2, "%s.%Lu", buffer, curTime.tv_usec);

使用更改后的micro定义,您还可以输出
sprintf(currentSeconds, "%.6f", micro / 1000000);

关于c++ - c/c++微秒时间戳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22203319/

10-10 13:21