2012-04-26 15 views
1

特定の日付のUNIX時刻を計算するために昇圧日時を使用しています。 ほとんどの場合、戻り値は正確ですが、計算された 秒の数値が正しくないことがあります。ptimeから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

何らかの理由でブーストにyear 2038 bugがあります。

周りの仕事は、あなたの祖父母が:)

更新を生まれる前から日付を避けるためです:ブーストバグトラッカーは、このためにa bugを持っています。 3歳です。

0

time_tintと32ビットのintに定義されている場合、その中で最も早い日付は1901-12-13T20:45:52です。マイケルSladeは、他の答えで述べたように、time_tがもっと大きい場合でも明らかにboostは内部的に32ビットを使用します。したがって、date 1900-01-01はboost::posix_time::ptimeで動作しません。

+0

私のシステムでは、 'time_t'は64ビットで、私は32ビットのバグを持っています。 'time_t'はコード内で実際には言及されていません。これはブーストの不足のようです。 –

関連する問題