C ++ конвертирует строковую дату (1/4/2000) в int date (20000104)

Я могу написать функцию для разбора строковой даты, но мне кажется, что я заново изобретаю колесо здесь. Существует ли более быстрый, возможно, встроенный в C ++ способ получения строковой даты этого формата: 1/4/2000 до более простого в использовании типа int, например 20000104?

1

Решение

Если вам не нужен встроенный в 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 для тебя. Если вы не привязаны к этому точному значению, вы просто хотите получить целое число в правильном порядке, тогда вы можете посмотреть, есть ли на вашей платформе функция, сообщающая вам так называемый «юлианский день».

3

Другие решения

Стандартная функция библиотеки 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, если хотите; соответствующий угол, кажется, Посикс Время.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector