2

我正在使用提升日期时间来计算特定日期的 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。您有解决此问题的方法吗?

4

2 回答 2

4

For some reason boost has the year 2038 bug.

The work around is to avoid dates from before your grandparents were born :)

update: the boost bug tracker has a bug for this. It's 3 years old.

于 2012-04-26T09:44:50.393 回答
0

如果您的系统已time_t定义为int32 位int,则其中可表示的最早日期为 1901-12-13T20:45:52。正如迈克尔斯莱德在另一个答案中所说,显然 boost 在内部某处使用 32 位,即使time_t更大,所以 date 1900-01-01 不适用于boost::posix_time::ptime.

于 2012-04-26T10:15:25.243 回答