我需要將自從時代以來的秒數轉換爲ptime
。我很確定必須有一個簡單的方法來做到這一點,但我找不到任何東西。謝謝。要升壓的unix時間戳:: posix_time :: ptime
編輯:原始時間戳是浮點數。我無法改變它,我不想失去亞秒精度。
我需要將自從時代以來的秒數轉換爲ptime
。我很確定必須有一個簡單的方法來做到這一點,但我找不到任何東西。謝謝。要升壓的unix時間戳:: posix_time :: ptime
編輯:原始時間戳是浮點數。我無法改變它,我不想失去亞秒精度。
經過一番擺弄周圍,我想出了這一點:
ptime(date(1970, 1, 1), time_duration(0, 0, 0, time_duration::ticks_per_second() * 1234567890.0987654321))
我不知道這是最好的解決辦法,但似乎做什麼,我需要的。
使用from_time_t()
轉換功能。 A time_t
是UNIX時間戳,即從紀元開始的秒數。
time_t不能包含秒的小數部分,但感謝回答 – cube 2009-07-22 19:55:33
對於具有編譯微秒分辨率的默認級別提升的日期/時間機器,試試這個:
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機器上。
你確定你需要一個雙?我認爲它適合int。 – slipbull 2009-07-22 19:30:32
是的,我需要加倍 - 它是我無法改變的界面的一部分。如果是幾秒鐘,那麼你不能捕獲小數部分...和http://xkcd.com/607/ :-) – cube 2009-07-22 19:50:14