Преобразовать строку в boost :: gregorian :: greg_month - PullRequest
0 голосов
/ 24 февраля 2012

Есть ли в библиотеке Boost дата-время вспомогательная функция для преобразования коротких строк месяца (например, январь, февраль, мар, апрель) в тип boost :: gregorian :: greg_month? Документация для библиотеки невелика, и я ничего не вижу в заголовках.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Хакерский обход может быть:

#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>

int main(void)
{
  auto ptr = boost::gregorian::greg_month::get_month_map_ptr();

  if (ptr)
  {
    auto it = ptr->begin();
    for(; it != ptr->end(); ++it)
    {
      std::cout << it->first << " " << it->second << '\n';
    }
  }
}

Эта карта содержит отображение всех коротких / длинных имен и коротких, необходимых для создания экземпляра greg_month. Просто нужно создать вокруг него маленькую обёртку ...

за открытие Грэма есть удобная функция, которая оборачивает это уже boost::date_time::month_str_to_ushort<>

0 голосов
/ 24 февраля 2012

Да, существуют улучшенные фасеты даты и времени, которые можно использовать для создания локалей и размещения в потоках.

Однако будьте осторожны, если вы собираетесь распечатывать или анализировать большое количество дат и времени, то вы этого не делаете.создайте фасет и локаль для каждого, который вы анализируете.

Смотрите здесь документацию по вводу дат.Некоторые из их примеров используют короткие названия месяцев, которые, как представляется, имеют %b в качестве спецификатора формата

...