有没有人知道是否有一种很好的方法将一个boost::posix_time::ptime变成一个__int64值.(我已经编译了微秒版本,而不是纳秒版本).
我需要以某种方式执行此操作,因为我希望将结果存储为使用原始数据__int64的union类型以用于高性能应用程序.某些类型的Memento功能对我来说非常有用.如果可能的话,我想避免演员阵容,但如果我需要,我会求助于他们.
我有一个32位的Linux系统,我必须在其中记录带有时间戳的数据,该时间戳是从1901-01-01 00:00:00的纪元开始的UINT32秒偏移.
计算时间戳对我来说没关系,因为我可以使用64位ticks()计数器和ticks_per_second()函数来生成自纪元以来的秒数,如下所示(我只需要二级分辨率)
const ptime ptime_origin(time_from_string("1901-01-01 00:00:00"));
time_duration my_utc = microsec_clock::universal_time() - ptime_origin;
boost::int64_t tick_per_sec = my_utc.ticks_per_second();
boost::int64_t tick_count = my_utc.ticks();
boost::int64_t sec_since_epoch = tick_count/tick_per_sec;
Run Code Online (Sandbox Code Playgroud)
这对我有用,因为我知道作为无符号整数,秒数不会超过最大UINT32值(不管多少年都没有).
我的问题是我的应用程序可以接收包含UINT32值的modbus消息,我必须ioctl使用调用来设置硬件和系统时钟RTC_SET_TIME.此UINT32再次是自我的纪元1901-01-01 00:00:00以来的秒数偏移量.
我现在的问题是我无法使用64位整数创建一个ptime对象 - 对象的ticks一部分time_duration是私有的,我被限制使用long哪个在我的32位系统上只是一个4字节的有符号整数,不足以存储从我的纪元偏离的秒数.
我无法控制时代的价值,所以我真的很难过如何boost::posix_time::ptime从我拥有的数据中创建我所需的对象.我可以通过计算特定时间间隔的硬第二次计数并使用额外的纪元来建立一个允许这种情况的桥来获得一个肮脏的解决方案,但我想知道boost代码中是否有某些内容可以让我完全使用提升日期时间库.我已经阅读了所有可以找到的文档,但是我看不到任何明显的方法.
编辑:我发现这个相关的问题将int64_t转换为time_duration但是接受的答案对我的纪元不起作用