把下面这两个函数加入代码中:
std::time_t getTimeStamp()
{
std::chrono::time_point<std::chrono::system_clock,std::chrono::milliseconds> tp = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
auto tmp=std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch());
std::time_t timestamp = tmp.count();
//std::time_t timestamp = std::chrono::system_clock::to_time_t(tp);
return timestamp;
}
std::tm* gettm(std::time_t timestamp)
{
std::time_t milli = timestamp/*+ (std::time_t)8*60*60*1000*/;//此处转化为东八区北京时间,如果是其它时区需要按需求修改
auto mTime = std::chrono::milliseconds(milli);
auto tp=std::chrono::time_point<std::chrono::system_clock,std::chrono::milliseconds>(mTime);
auto tt = std::chrono::system_clock::to_time_t(tp);
std::tm* now = std::gmtime(&tt);
printf("%4d年%02d月%02d日 %02d:%02d:%02d.%d\n",now->tm_year+1900,now->tm_mon+1,now->tm_mday,now->tm_hour,now->tm_min,now->tm_sec, milli%1000);
return now;
}
在需要打印系统时间的位置 调用如下代码:
gettm(getTimeStamp());
然后就可以打印出时间戳了:
2019年12月01日 06:13:11.206
msg head recved!
系统时间戳:
#include <ratio>
#include <chrono>
uint64_t ts_ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
//time_since_epoch函数表示求 从1970-01-01到该时间点的duration。
//duration_cast函数表示把精度强转到<>内的精度
//count表示数出有多少个滴答(chrono库里,精度表示一个滴答的时间间隔。毫秒精度,就是1毫秒1个滴答)
C语言实现如下:
#include <sys/time.h>
#include <stdint.h>
int32_t GetTimeStamp(uint64_t *ts)
{
struct timeval sysTime;
uint64_t sysTime64;
(void)gettimeofday(&sysTime, NULL);
sysTime64 = (uint64_t)sysTime.tv_sec * 1000;
sysTime64 += (uint64_t)(sysTime.tv_usec / 1000);
*ts = sysTime64;
return 0;
}