boost :: gregorian :: дата из std :: string

Я попытался преобразовать std :: string в boost :: gregorian :: date следующим образом:

#include <iostream>
#include "boost/date_time/gregorian/gregorian.hpp"
int main(int argc, char *argv[])
{
std::string s_date = "1922-02-29";
std::stringstream ss(s_date);
boost::gregorian::date_input_facet *df = new boost::gregorian::date_input_facet("%Y-%m-%d");
ss.imbue(std::locale(ss.getloc(), df));
date d;
ss>>d;
std::cout<<d<<std::endl;
}

Но, к сожалению, я получил только «не дату». Что я делаю не так? Есть ли более простой способ конвертировать строку в такой популярной форме для boost :: gregorian: date?

1

Решение

Что я делаю не так?

Вы получаете «не дату», потому что это недопустимая дата: 1922 год не был високосным, поэтому в феврале было всего 28 дней.

Ваш код работает, как и ожидалось, если я изменю его на действительную дату, такую ​​как 1922-02-28 или же 1924-02-29,

Есть ли более простой способ конвертировать строку в такой популярной форме для boost :: gregorian: date?

boost::gregorian::date d = boost::gregorian::from_string(s_date);
6

Другие решения

Так должно быть:

boost::gregorian::date d = boost::gregorian::from_undelimited_string(s_date);

Не ‘from_date’

Строка требуется принять для формы ГГГГММДД.

Или вы можете использовать:

boost::gregorian::date d = boost::gregorian::from_string(s_date);

где ваша строка принимает форму ГГГГ / ММ / ДД

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector