Boost boost :: posix_time :: time_duration в строку - PullRequest
3 голосов
/ 19 января 2011

Здравствуйте, я использую 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

это видно здесь

Я хочу вернуть строку для последующего вывода и т. Д.

Как я могу решить эту проблему?Я не вижу метода в boost для преобразования

boost::posix_time::time_duration

в строку.Я новичок как в C ++, так и в Boost, поэтому извиняюсь, если это действительно просто.

Ответы [ 4 ]

5 голосов
/ 19 января 2011

использование оператор << </a>

#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 для включения операторов ввода-вывода.

1 голос
/ 24 июня 2016

Я думаю, что форматирование строки с time_duration немного раздражает.Я хотел отформатировать продолжительность, указанную в секундах, в d ЧЧ: мм: сс (например, 1 10:17:36 для 123456 секунд).Поскольку я не мог найти подходящую функцию форматирования, я выполнил часть работы «вручную»:

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());
}

Не очень элегантно, но лучшее, что я придумал.

1 голос
/ 19 января 2011

Вы пробовали просто использовать оператор <<: </p>

std::stringstream ssDuration;
ssDuration << duration;

std::string str = ssDuration.str();
0 голосов
/ 19 января 2011

Вы можете использовать усиление библиотеки даты / времени для преобразования времени в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...