Я могу написать функцию для разбора строковой даты, но мне кажется, что я заново изобретаю колесо здесь. Существует ли более быстрый, возможно, встроенный в C ++ способ получения строковой даты этого формата: 1/4/2000 до более простого в использовании типа int, например 20000104?
Если вам не нужен встроенный в C ++ способ проверки, «очевидный» синтаксический анализ:
int parseDate(const std::string &input) {
int month;
int day;
int year;
if (std::sscanf(input.c_str(), "%d/%d/%d", &month, &day, &year) != 3) {
// handle error
} else {
// check values to avoid int overflow if you can be bothered
return 10000 * year + 100 * month + day;
}
}
Вы можете использовать потоковые экстракторы вместо sscanf
если ты хочешь написать несколько строк кода Тип безопасности.
В стандартной библиотеке нет ничего, что могло бы 10000 * year + 100 * month + day
для тебя. Если вы не привязаны к этому точному значению, вы просто хотите получить целое число в правильном порядке, тогда вы можете посмотреть, есть ли на вашей платформе функция, сообщающая вам так называемый «юлианский день».
Стандартная функция библиотеки strptime()
, не уверен, насколько «чистым» считается C ++.
Если ты в порядке с strptime()
вот как бы вы использовали это для вашего случая:
struct tm when;
strptime("1/4/2000", "%m/%d/%y", &tm); // Note: should check return value.
const int sortable = 10000 * tm.tm_year + 100 * tm.tm_month + tm.tm_day;
Конечно, вы можете использовать Boost, если хотите; соответствующий угол, кажется, Посикс Время.