2009-07-22 85 views
10

我需要將自從時代以來的秒數轉換爲ptime。我很確定必須有一個簡單的方法來做到這一點,但我找不到任何東西。謝謝。要升壓的unix時間戳:: posix_time :: ptime

編輯:原始時間戳是浮點數。我無法改變它,我不想失去亞秒精度。

+0

你確定你需要一個雙?我認爲它適合int。 – slipbull 2009-07-22 19:30:32

+1

是的,我需要加倍 - 它是我無法改變的界面的一部分。如果是幾秒鐘,那麼你不能捕獲小數部分...和http://xkcd.com/607/ :-) – cube 2009-07-22 19:50:14

回答

5

經過一番擺弄周圍,我想出了這一點:

ptime(date(1970, 1, 1), time_duration(0, 0, 0, time_duration::ticks_per_second() * 1234567890.0987654321)) 

我不知道這是最好的解決辦法,但似乎做什麼,我需要的。

8

使用from_time_t()轉換功能。 A time_t是UNIX時間戳,即從紀元開始的秒數。

+1

time_t不能包含秒的小數部分,但感謝回答 – cube 2009-07-22 19:55:33

7

對於具有編譯微秒分辨率的默認級別提升的日期/時間機器,試試這個:

double ts = 1250524800.5; 
// Use floor() here if seconds are always positive. 
time_t secondsSinceEpoch = floor(ts); 
long microsecondsSinceSecond = 
    floor((ts - static_cast<double>(secondsSinceEpoch)) * 1000000); 
boost::posix_time::ptime result = 
    boost::posix_time::from_time_t(secondsSinceEpoch); 
boost::posix_time::time_duration fractionalSeconds(0, 0, 0, 
                microsecondsSinceSecond); 
result += fractionalSeconds; 
cout << "Time stamp is " << result << endl; 

這個輸出是「時間戳是2009年8 - 17 16:00: 00.500000「在我的Linux機器上。