13

我需要将具有自纪元以来秒数的 double 转换为ptime. 我很确定一定有一种简单的方法可以做到这一点,但我找不到任何东西。谢谢。

编辑:原始时间戳是浮点数。我不能改变它,我不想失去亚秒级的精度。

4

3 回答 3

8

使用from_time_t()转换功能。Atime_t是 UNIX 时间戳,即自纪元以来的秒数。

于 2009-07-22T19:19:13.910 回答
8

对于已将提升日期/时间编译为默认微秒分辨率级别的机器,请尝试以下操作:

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;

在我的 linux 机器上,此输出是“时间戳为 2009 年 8 月 17 日 16:00:00.500000”。

于 2010-02-10T00:28:43.273 回答
7

经过一番摆弄后,我想出了这个:

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

我不确定这是最好的解决方案,但它似乎可以满足我的需要。

于 2009-07-22T20:37:34.593 回答