В библиотеке даты и времени Boost есть служебная функция для преобразования коротких строк месяца (например, январь, февраль, март, апрель) в тип boost::gregorian::greg_month? Документация по библиотеке невелика, и я ничего не вижу в заголовках.
Преобразование строки в boost::gregorian::greg_month
Ответы (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<>
Да, есть фасеты даты и времени, которые можно использовать для создания локалей и добавления в потоки.
Помните, однако, что если вы собираетесь печатать или анализировать большое количество дат и времени, вы не создаете фасет и локаль для каждого из них, которые вы анализируете.
Документацию по ввод дат. В некоторых из их примеров используются короткие названия месяцев, которые имеют %b
в качестве описатель формата