c / c ++微秒时间戳

我使用这段代码在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 ++):

 __int64 microseconds_since_epoch = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); 

使用Howard Hinnant的免费,开源,仅限标题的日期/时间库 :

 #include "date/date.h" #include  int main() { using namespace date; using namespace std; using namespace std::chrono; cout << floor(system_clock::now()) << '\n'; } 

只为我输出:

 2017-09-29 15:46:27.793195