Преобразование строки в boost::gregorian::greg_month

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


person Graeme    schedule 24.02.2012    source источник


Ответы (2)


Хакерская работа может быть:

#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<>

person Nim    schedule 24.02.2012
comment
Только что нашел функцию, уже завершающую это: boost::date_time::month_str_to_ushort‹month_type›. Спасибо за помощь! - person Graeme; 24.02.2012
comment
@ Грэм, ага - она ​​должна была быть где-то там - это довольно тривиальная функция ... :) - person Nim; 24.02.2012

Да, есть фасеты даты и времени, которые можно использовать для создания локалей и добавления в потоки.

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

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

person CashCow    schedule 24.02.2012