正确更改TAI时间纪元

时间:2018-06-20 13:32:37

标签: c++ time

当前,我正在开发一个需要两个特定时间才能正确工作的实现。 时间的编码方式如下:

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

开始的纪元的TAI时间。

现在涉及到棘手的部分:我必须转换纪元以满足我的要求。

所以我很愚蠢的方法是: 一天有86400 TAI秒。 从1970-01-01 00:00:00.0002004-01-01 00:00:00.00012418天。 因此,我必须从当前的TAI时间中减去1072915200秒,才能获得从2004-01-01 00:00:00.000开始经过的TAI秒。

所以,我的问题是:我可以使用这种方法正确转换TAI时间的纪元吗?还是比较棘手?

1 个答案:

答案 0 :(得分:1)

您可以使用Do While ie.busy Loop 来获取当前时间,为boost建立一个时间对象并计算时差

2004-01-01T00:00:00Z