📜  程序检查日期是否有效

📅  最后修改于: 2021-04-30 02:24:42             🧑  作者: Mango

给定日期,检查它是否有效。可以假定给定的日期在01/01/1800到31/12/9999之间。

例子 :

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.

这个想法很简单。我们需要处理以下事情。
1)y,m和d在允许范围内。
2)2月的天在允许的范围内,并处理is年。
3)处理30天月份中的天数。

以下是检查给定年份是否有效的实现。

C++
// C++ program to check if
// given date is valid or not.
#include
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";
}


Java
// Java program to check if
// given date is valid or not.
import java.io.*;
 
class GFG
{
 
    static int MAX_VALID_YR = 9999;
    static int MIN_VALID_YR = 1800;
 
    // Returns true if
    // given year is valid.
    static boolean isLeap(int year)
    {
        // Return true if year is
        // a multiple of 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.
    static boolean 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
    public static void main(String args[])
    {
        if (isValidDate(10, 12, 2000))
            System.out.println("Yes");
        else
            System.out.println("No");
 
        if (isValidDate(31, 11, 2000))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed
// by Nikita Tiwari.


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


C#
// C# program to check if
// given date is valid or not.
using System;
 
class GFG
{
 
    const int MAX_VALID_YR = 9999;
    const int MIN_VALID_YR = 1800;
 
    // Returns true if
    // given year is valid.
    static bool isLeap(int year)
    {
         
        // Return true if year is a
        // multiple of 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.
    static 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
    public static void Main()
    {
         
        if (isValidDate(10, 12, 2000))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
 
        if (isValidDate(31, 11, 2000))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed
// by Anant Agarwal.


PHP
 $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
{
if(isValidDate(10, 12, 2000))
echo "Yes\n" ;
else
echo "No\n";
 
if(isValidDate(31, 11, 2000))
    echo "Yes\n" ;
else
echo "No\n";
     
}
 
// This code is contributed
// by nitin mittal.
?>


Javascript


输出 :

Yes
No