将boost :: posix_time :: time_duration提升为字符串

时间:2011-01-19 15:15:47

标签: c++ boost

您好我正在使用boost Posix Time System。我有一个班级

class event{
private:
boost::posix_time::ptime time;

//some other stuufff

public:
string gettime(void);
}

//functions
string event::gettime(void){
return  to_iso_extended_string(time.time_of_day());
}

但是to_iso_extended_string不采用类型

boost::posix_time::time_duration

只输入

boost::posix_time

可以看到here

我想返回一个字符串,以便稍后输出e.t.c。

我该如何解决这个问题?我无法在boost中看到转换方法

boost::posix_time::time_duration

到字符串。我是C ++的新手,如果这是一个非常简单的话,我会道歉。

4 个答案:

答案 0 :(得分:5)

使用operator<<

#include <boost/date_time/posix_time/posix_time.hpp>

#include <iostream>

int
main()
{
    using namespace boost::posix_time;
    const ptime start = microsec_clock::local_time();
    const ptime stop = microsec_clock::local_time();
    const time_duration elapsed = stop - start;
    std::cout << elapsed << std::endl;
}
mac:stackoverflow samm$ g++ posix_time.cc -I /opt/local/include    
mac:stackoverflow samm$ ./a.out
00:00:00.000485
mac:stackoverflow samm$ 

请注意,您需要使用posix_time.hpp标题而不是posix_time_types.hpp来包含I / O运算符。

答案 1 :(得分:1)

您是否尝试过简单地使用&lt;&lt;操作者:

std::stringstream ssDuration;
ssDuration << duration;

std::string str = ssDuration.str();

答案 2 :(得分:1)

我认为使用time_duration进行字符串格式化很烦人。我想将以秒为单位指定的持续时间格式化为d HH:mm:ss(例如1 10:17:36,持续123456秒)。由于我找不到合适的格式化功能,我手工做了一些工作&#39;:

const int HOURS_PER_DAY = 24;

std::string formattedDuration(const int seconds)
{
    boost::posix_time::time_duration a_duration = boost::posix_time::seconds(seconds);

    int a_days = a_duration.hours() / HOURS_PER_DAY;
    int a_hours = a_duration.hours() - (a_days * HOURS_PER_DAY);

    return str(boost::format("%d %d:%d:%d") % a_days % a_hours %  a_duration.minutes() % a_duration.seconds());
}

不是很优雅,但我想出的最好。

答案 3 :(得分:-1)

您可以使用boost date/time库将时间转换为字符串。