Programa para comprobar si una fecha es válida o no

Dada una fecha, comprobar si es válida o no. Se puede suponer que la fecha dada está en el rango del 01/01/1800 al 31/12/9999.

Ejemplos:  

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.

La idea es sencilla. Necesitamos manejar las siguientes cosas. 
1) y, m y d están en el rango permitido. 
2) Los días de febrero están dentro del rango permitido y se maneja  el año bisiesto .
3) Se manejan días en meses de 30 días.

A continuación se muestra la implementación para verificar si un año determinado es válido o no. 

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 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.
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.

Python3

# 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

<?php
// PHP program to check if
// given date is valid or not.
 
// Returns true if
// given year is valid.
function isLeap($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.
function isValidDate($d, $m, $y)
{
    $MAX_VALID_YR = 9999;
    $MIN_VALID_YR = 1800;
    // 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
{
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

<script>
 
// Javascript program to check if
// given date is valid or not.
const MAX_VALID_YR = 9999;
const MIN_VALID_YR = 1800;
 
// Returns true if
// given year is valid.
function isLeap(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.
function isValidDate(d, m, 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
isValidDate(10, 12, 2000) ? document.write("Yes<br>") :
                            document.write("No<br>");
 
isValidDate(31, 11, 2000) ? document.write("Yes<br>") :
                            document.write("No<br>");
                             
// This code is contributed by souravmahato348
 
</script>

Producción : 

Yes
No

Complejidad de tiempo: O(1)
Espacio auxiliar: O(1) 
Este artículo es una contribución de RAHUL NITKKR . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *