我需要将自从时代以来的秒数转换为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