将ptime提升为unix时间戳转换错误

时间:2012-04-26 09:23:24

标签: c++ datetime boost

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

2 个答案:

答案 0 :(得分:4)

出于某种原因,boost有year 2038 bug

周围的工作是避免在你的祖父母出生之前的日期:)

更新:增强错误跟踪器为此a bug。已经3岁了。

答案 1 :(得分:0)

如果您的系统time_t定义为int和32位int,则其中可表示的最早日期为1901-12-13T20:45:52。正如Michael Slade在另一个答案中所说,即使time_t更大,显然也会在内部使用32位,因此日期1900-01-01不能与boost::posix_time::ptime一起使用。