gpt4 book ai didi

c++ - boost::posix_time::time_duration 溢出?

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:24 26 4
gpt4 key购买 nike

我有以下代码从 posix_time 获取 UNIX 时间

boost::posix_time::ptime time1(boost::gregorian::date(9999,12,31));
boost::posix_time::ptime epoch(boost::gregorian::date(1970,1,1));

boost::posix_time::time_duration diff = time1-epoch;
cout<<"A: "<<time1<<endl;
cout<<"B: "<<epoch<<endl;
cout<<"C: "<<diff<<endl;

unix_time = diff.total_seconds()

给我这个输出

9999-Dec-31 00:00:00
1970-Jan-01 00:00:00
-1347834:03:51.933722624

现在 diff 不应该是负数。我怎样才能正确计算?是否溢出?

最佳答案

(顺便说一句 - 我使用 coliru 作为下面的输出,我的本地 gcc 5.3.1 和 boost 1.60 重现了)

问题是你想在几秒钟内得到这个数字,所以让我们尝试一些基本的数学运算(看看我是否做对了!):)

A: 9999-Dec-31 00:00:00
B: 1970-Jan-01 00:00:00
C: 70389504:00:00

因此差值(以小时表示)为 70389504 小时。以秒为单位:

70389504 * 60 * 60 => 253402214400 秒

现在,在库的内部,有一个 sec_type 的类型定义,默认为 boost::int32_t。因此,除非将其设置为 int64_t,否则上述值将溢出。

至于如何覆盖它,这是不可能的,除非你破解 date_time 库,并将 time_resolution_traits.h 中的默认值从 boost::int32_t 更改为boost::int64_..(可能还有另一种方法,但我还没有足够详细地研究代码来告诉你那会是什么..)

现在对于你的真正问题,你似乎有这个设置 -DBOOST_DATE_TIME_POSIX_TIME_STD_CONFIG - 我怀疑你想要纳秒精度?如果是这样,我认为您必须减少支持的日期范围。

关于c++ - boost::posix_time::time_duration 溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37672191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com