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

何らかの理由で、ブーストには2038年問題があります。

回避策は、祖父母が生まれる前の日付を避けることです:)

更新:ブーストバグトラッカーにはこのバグがあります。3歳です。

于 2012-04-26T09:44:50.393 に答える
0

システムが32ビットにtime_t定義されている場合、システムで表現できる最も早い日付は1901-12-13T20:45:52です。Michael Sladeが他の回答で述べたように、ブーストは、たとえそれが大きくても、内部的に32ビットを使用しているようです。したがって、日付1900-01-01はで機能しません。intinttime_tboost::posix_time::ptime

于 2012-04-26T10:15:25.243 に答える