Как преобразовать boost :: gregorian :: date в формат мм / дд / гггг и наоборот? - PullRequest
0 голосов
/ 23 августа 2011

Boost имеет несколько функций, конвертирующих в другие форматы строк, описанные здесь , но конвертация в необходимый формат mm/dd/yyyy отсутствует.В настоящее время я делаю это следующим образом:

 std::string dateAsMMDDYYYY( const boost::gregorian::date& date )
 {
    std::string yyyymmdd = boost::gregorian::to_iso_string( date );
    std::string ret = yyyymmdd.substr(4,2) + "/" + yyyymmdd.substr(6,2) + "/" + yyyymmdd.substr(0,4);
    return ret;
 }

, то есть просто вырезаем числа из значения, возвращенного to_iso_string().Это кажется очень грубым, и я ищу более элегантный способ выполнить это преобразование.Также мне нужен совет о том, как выполнить обратное преобразование (т.е. из строки 'mm / dd / yyyy' в boost :: gregorian :: date)

Любая помощь приветствуется.Заранее спасибо.

Ответы [ 3 ]

10 голосов
/ 23 августа 2011

повышение имеет довольно универсальный дата / время IO объектов

const std::locale fmt(std::locale::classic(),
                      new boost::gregorian::date_facet("%m/%d/%Y"));
std::string dateAsMMDDYYYY( const boost::gregorian::date& date )
{
    std::ostringstream os;
    os.imbue(fmt);
    os << date;
    return os.str();
}

Обратное преобразование:

const std::locale fmt2(std::locale::classic(),
                       new boost::gregorian::date_input_facet("%m/%d/%Y"));
boost::gregorian::date MMDDYYYYasDate( const std::string& str)
{
    std::istringstream is(str);
    is.imbue(fmt2);
    boost::gregorian::date date;
    is >> date;
    return date;
}
3 голосов
/ 11 сентября 2012
 boost::gregorian::date d(boost::gregorian::day_clock::local_day());
  char date[10];
  sprintf ( date, "%d/%d/%d", static_cast<short>(d.month()), static_cast<short>(d.day()), static_cast<short>(d.year()) );
1 голос
/ 23 августа 2011

Лучшим вариантом было бы использовать std :: stringstream и выводить число даты, месяца и года отдельно и добавлять косые черты между собой.

...