- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码从 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/
我想计算 boost::posix_time:ptime 中两个时间戳之间的时间差(以秒为单位)。但是,由于 timestamp 最多包含微秒,结果可能会出乎我的意料。 boost::posix_ti
我正在使用 boost::posix_time 来实现时钟。 date d(2000,Jan,20); ptime start(d); time_iterator titr(start,microse
我有以下代码从 posix_time 获取 UNIX 时间 boost::posix_time::ptime time1(boost::gregorian::date(9999,12,31)); bo
我想转换一个 time_duration到 DATE格式,即自1899年以来的天数、12、30。 DATE date_from_duration(time_duration td) { doub
我想通过网络传输 boost::posix_time::ptime 作为 boost::int64_t。根据A way to turn boost::posix_time::ptime into an
我正在使用 boost::posix_time::ptime 来测量我的模拟运行时间和其他东西。 假设 boost::posix_time::ptime start, stop; boost::pos
可以通过 total_microseconds 方法从 time_duration 中获取总微秒数,但我不知道如何根据该数字重新构建 time_duration。文档中似乎没有用于此目的的构造函数,我
考虑这段代码(使用 VS2015 编译,使用 boost 1.60: #include #include #include int main( int argc, char* argv[] )
我知道我可以使用 boost::gregorian::date_duration 作为以天为单位的时间间隔,使用 boost::posix_time::time_duration 作为时间间隔,但是有
您好,我正在使用 boost Posix 时间系统。我有课 class event{ private: boost::posix_time::ptime time; //some other stuu
我正在尝试为 boost::posix_time::duration 编写一个简单的生成器以在另一个生成器中使用。现在对我来说关键是我想打印的“+”或“-”。到目前为止我所拥有的是: struct G
我正在尝试将 boost::posix_time::time_duration 对象转换为 "%H%M"形式的 string。问题是对话是不工作就好像它不存在一样。 我用来将 Duration 转换为
下面这段代码: auto td = boost::posix_time::seconds(1); auto seconds = td.seconds(); // (*) std::cout << se
我是一名优秀的程序员,十分优秀!