Хороший синтаксический сахар, который вы добавили!

грушки в колиру, который я использую для тестирования:http://coliru.stacked-crooked.com/a/4039865d8d4dad52

После долгого перерыва я снова привыкаю к ​​C ++. Я пишу код, который анализирует CSV, который может иметь несколько столбцов с датами или нулями. Я предполагаю, что каждый столбец даты имеет ровно один вид допустимого формата даты, хотя разные столбцы могут иметь разные форматы.

Для каждого столбца даты, который у меня есть, я нахожу первое значение, которое успешно анализируется как дата, заданная std :: vector потенциальных локалей с объектом boost date_input_facet. Эта первая дата, которая правильно анализирует, вернет индекс в моем массиве локалей, который работал. Как только у меня будет подходящий формат для первой анализируемой даты, я хочу навсегда исправить этот формат, чтобы мне больше не приходилось тратить время процессора на его определение.

Вот мой массив локалей:

const std::vector<std::locale> Date::date_formats = {
    std::locale(std::locale::classic(), new date_input_facet("%Y-%m-%d")),
    std::locale(std::locale::classic(), new date_input_facet("%Y/%m/%d")),
    std::locale(std::locale::classic(), new date_input_facet("%m-%d-%Y")),
    std::locale(std::locale::classic(), new date_input_facet("%m/%d/%Y")),
    std::locale(std::locale::classic(), new date_input_facet("%d-%b-%Y")),
    std::locale(std::locale::classic(), new date_input_facet("%Y%m%d")),
};

Я использую массив строк дат с 20170101 по 20170131, чтобы проверить это. Затем я распечатываю исходные строки даты, проанализированную дату, а также индекс вектора date_formats, который работал для анализа.

В период с 20170101 по 201700129 написано, что сработал 0-й индекс, который должен иметь формат «% Y-% m-% d» с тире?!?! Более того, там, где идут тире, у меня есть числа, поэтому они читают 20170101 как 2017-10 - затем отбрасываем последний тире и интерпретируем его как октябрь 2017 года, который без даты - 1 октября 2017 года. Зачем это делать, если это не так? формат, который он должен был использовать?

Некоторые результаты, которые можно увидеть из моей колиры (pY - год анализа и т. Д.):

YYYYMMDD    pY     pM   pD  format_index
20170101    2017    Oct 1   0
20170102    2017    Oct 1   0
20170103    2017    Oct 1   0
20170104    2017    Oct 1   0
20170105    2017    Oct 1   0

Для 20170130, 20170131 правильный индекс формата (5-й) сообщается для «% Y% m% d».

Есть идеи? Я хочу использовать только точную строку формата, которую я передал.

Ответы на вопрос(2)

Ваш ответ на вопрос