当前,我正在开发一个需要两个特定时间才能正确工作的实现。 时间的编码方式如下:
Timestamp = Timestamp(TAI) % 2^32
where Timestamp(TAI) is the number of elapsed
TAI milliseconds since 2004-01-01 00:00:00.000 UTC
现在,我尝试了以下基本有效的方法,但不确定输出是否正确。
timespec now;
if (clock_gettime(CLOCK_TAI, &now) == 0) {
// tai_clock uses microsecond ticks
tai_clock::rep ticks = 0;
ticks = now.tv_sec * period::den;
ticks += now.tv_nsec / 1000;
return tai_clock::time_point(std::chrono::microseconds(ticks));
} else {
throw std::runtime_error("reading CLOCK_TAI failed");
}
此代码段获取我系统上的当前TAI时间。
另外,该代码要求在系统上正确配置TAI偏移秒。
使用此代码部分,我得到了以1970-01-01 00:00:00.000
现在涉及到棘手的部分:我必须转换纪元以满足我的要求。
所以我很愚蠢的方法是:
一天有86400
TAI秒。
从1970-01-01 00:00:00.000
到2004-01-01 00:00:00.000
是12418
天。
因此,我必须从当前的TAI时间中减去1072915200
秒,才能获得从2004-01-01 00:00:00.000
开始经过的TAI秒。
所以,我的问题是:我可以使用这种方法正确转换TAI时间的纪元吗?还是比较棘手?
答案 0 :(得分:1)
您可以使用Do While ie.busy
Loop
来获取当前时间,为boost
建立一个时间对象并计算时差
2004-01-01T00:00:00Z