# Program to check if a date is valid or not

Given a date, check if it is valid or not. It may be assumed that the given date is in range from 01/01/1800 to 31/12/9999.

Examples :

```Input : d = 10, m = 12, y = 2000
Output : Yes
The given date 10/12/2000 is valid

Input  : d = 30, m = 2, y = 2000
Output : No
The given date 30/2/2000 is invalid. The
February month cannot have 30 as day.```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

The idea is simple. We need to handle following things.
1) y, m and d are in allowed range.
2) Days in February are in allowed range and leap year is handled.
3) Days in 30 day months are handled.

Below is C++/Python implementation to check if a given year is valid or not.

## C++

```// C++ program to check if given date is valid
// or not.
#include<iostream>
using namespace std;

const int MAX_VALID_YR = 9999;
const int MIN_VALID_YR = 1800;

// Returns true if given year is valid.
bool isLeap(int year)
{
// Return true if year is a multiple pf 4 and
// not multiple of 100.
// OR year is multiple of 400.
return (((year%4==0) && (year%100!=0)) ||
(year%400==0));
}

// Returns true if given year is valid or not.
bool isValidDate(int d, int m, int y)
{
// If year, month and day are not in given range
if (y > MAX_VALID_YR || y < MIN_VALID_YR)
return false;
if (m < 1 || m > 12)
return false;
if (d < 1 || d > 31)
return false;

// Handle February month with leap year
if (m == 2)
{
if (isLeap(y))
return (d <= 29);
else
return (d <= 28);
}

// Months of April, June, Sept and Nov
// must have number of days less than
// or equal to 30.
if (m==4 || m==6 || m==9 || m==11)
return (d <= 30);

return true;
}

// Driver code
int main(void)
{
isValidDate(10, 12, 2000)? cout << "Yes\n" :
cout << "No\n";

isValidDate(31, 11, 2000)? cout << "Yes\n" :
cout << "No\n";
}
```

## Python

``` #Python Program to check
#if a date is valid or not

import datetime
def date_validation(day, month, year):

isValidDate = True

try :
datetime.datetime(int(year), int(month), int(day))

except ValueError :
isValidDate = False

if(isValidDate) :
print ("Yes")
else :
print ("No")

date_validation(10,12,2000)
date_validation(31,11,2000)

#This code is contributed by ajay0007
```

Output :

```Yes
No```

This article is contributed by RAHUL NITKKR. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
1.6 Average Difficulty : 1.6/5.0
Based on 3 vote(s)