Преобразовать дату std :: string в объект QuantLib :: Date

Поскольку часто случается, что такие строки читаются из файлов .csv или .txt, я хотел бы узнать самый простой способ получить %d/%m%/%y (или любой другой подобный формат) и преобразовать его в нечто подходящее для QuantLib::Date объект конструктор.

Вот ниже пример кода:

#include <ql/quantlib.hpp>
#include <boost/timer.hpp>
#include <iostream>
#include <iomanip>
#include <boost/algorithm/string.hpp>

int main() {

boost::timer timer;
std::cout << std::endl;
std::string datesString = {
",17/10/2014,21/11/2014,19/12/2014,20/03/2015,19/06/2015,18/09/2015,18/12/2015,17/06/2016,"};
std::vector<std::string> expiryDates;
boost::split(expiryDates, datesString, boost::is_any_of(","));
for(int i = 0; i < expiryDates.size(); i++)
{
std::cout << expiryDates[i] << std::endl;
}
// 17/10/2014
// 21/11/2014
// 19/12/2014
// 20/03/2015
// 19/06/2015
// 18/09/2015
// 18/12/2015
// 17/06/2016

// QuantLib::Date myQLDate(?);

return 0;

}

1

Решение

Это отчасти скрыто, но как только вы включите <ql/utilities/dataparsers.hpp> ты можешь использовать:

Date d = DateParser::parseFormatted(expiryDates[i], format);

где format является строкой формата Boost.Date. В твоем случае,

Date d = DateParser::parseFormatted(expiryDates[i], "%d/%m/%Y");

должен сделать свое дело.

5

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

  for(int i = 0; i < expiryDates.size(); i++)
{
int day, month, year;
sscanf(expiryDates[i].c_str(), "%d/%d/%d", &day, &month, &year);
QuantLib::Date myQLDate(day, month, year);
}
3

По вопросам рекламы [email protected]