2009-07-22 89 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机器上。