2012-04-26 37 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

的解決辦法是避免從日期之前,你的祖父母出生:)

更新:升壓bug跟蹤系統具有a bug這一點。它已經3歲了。

0

如果您的系統有time_t定義爲int和32位int,那麼可以表示的最早日期爲1901-12-13T20:45:52。正如邁克爾斯萊德在另一個答案中所說的那樣,即使time_t較大,顯然會在某處內部使用32位,所以日期1900-01-01不適用於boost::posix_time::ptime

+0

不是很明顯 - 在我的系統上''time_t'是64位,我得到了32位錯誤。實際上在代碼中甚至沒有提到'time_t'。這似乎是一個不足之處。 – 2012-04-26 13:37:50