Хороший синтаксический сахар, который вы добавили!
грушки в колиру, который я использую для тестирования: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».
Есть идеи? Я хочу использовать только точную строку формата, которую я передал.