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