C++ проверьте правильность даты
есть ли функция, чтобы проверить, является ли данная дата действительной или нет? Я не хочу ничего писать с нуля.
например, 32/10/2012 недопустимо и 10/10/2010 действительно
4 ответов
Если ваша строка всегда находится в этом формате, проще всего было бы разделить строку на три ее компонента, заполните tm
структура и передать его mktime()
. Если он возвращает -1, то это недопустимая дата.
вы также можете использовать импульс.Дата_время, чтобы разобрать его:
string inp("10/10/2010");
string format("%d/%m/%Y");
date d;
d = parser.parse_date(inp, format, svp);
класс времени даты повышения должен иметь возможность обрабатывать то, что вам требуется. См.http://www.boost.org/doc/libs/release/doc/html/date_time.html
Если формат даты является постоянным, и вы не хотите использовать boost, вы можете всегда использовать strptime
, определена в :
const char date1[] = "32/10/2012";
const char date2[] = "10/10/2012";
struct tm tm;
if (!strptime(date1, "%d/%m/%Y", &tm)) std::cout << "date1 isn't valid\n";
if (!strptime(date2, "%d/%m/%Y", &tm)) std::cout << "date2 isn't valid\n";
если косые черты вставлены программно (я бы предположил, так как вы предполагаете, что они всегда будут там.), вероятно, было бы лучше проверить месяц, день и год отдельно. Например:
if ( (month < 1) || (month > 12) ) return false;