我正在使用提升日期时间计算特定日期的unix时间。 在大多数情况下,返回的值是正确的,但有时是计算出的值 第二是不正确的。
这是一个例子:
boost::posix_time::ptime t(boost::gregorian::date(1900, 1, 1));
boost::posix_time::ptime epoch(boost::gregorian::date(1970, 1, 1));
boost::posix_time::time_duration dur;
dur = t - epoch;
int tstamp = dur.total_seconds();
if (t < epoch) tstamp = -tstamp ;
预期值为-2208902400,但我得到-2085978496。 你有解决这个问题的方法吗?
答案 0 :(得分:4)
答案 1 :(得分:0)
如果您的系统time_t
定义为int
和32位int
,则其中可表示的最早日期为1901-12-13T20:45:52。正如Michael Slade在另一个答案中所说,即使time_t
更大,显然也会在内部使用32位,因此日期1900-01-01不能与boost::posix_time::ptime
一起使用。