首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确改变太古时代

正确改变太古时代
EN

Stack Overflow用户
提问于 2018-06-20 13:32:36
回答 1查看 366关注 0票数 0

目前,我正在开发一个需要特定时间的实现--两个正确工作。应如何编码时间如下:

Timestamp = Timestamp(TAI) % 2^32 where Timestamp(TAI) is the number of elapsed TAI milliseconds since 2004-01-01 00:00:00.000 UTC

现在,我尝试了以下基本工作,但我不确定输出是否正确。

代码语言:javascript
复制
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偏移量秒。使用这个代码部分,我得到了TAI时间,从1970-01-01 00:00:00.000开始有一个时代

现在到了棘手的部分:我必须转换时代,以满足我的要求。

因此,我非常愚蠢的方法是:有一天有86400台秒。从1970-01-01 00:00:00.0002004-01-01 00:00:00.000都是12418日。因此,我必须从当前的TAI时间中减去1072915200秒,以获得自2004-01-01 00:00:00.000以来经过的TAI秒。

所以,我现在的问题是:我能用这种方法正确地转换我的大时间的时代吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 09:01:17

您可以使用boost获取当前时间,为2004-01-01T00:00:00Z构建时间对象并计算差异

代码语言:javascript
复制
#include "boost/date_time/posix_time/posix_time.hpp"

boost::posix_time::ptime now(boost::posix_time::microsec_clock::universal_time());
boost::posix_time::ptime before(time_from_string("20040101T000000Z"));
long long diff = (now - before).total_microseconds();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50949516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档