Comment vérifier si la date est valide en Java

Comment vérifier si la date est valide en Java

En Java, vous pouvez utiliser la classeSimpleDateFormat pour vérifier si une date fournie est valide.

1. Exemple de DateValidator

package com.example.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateValidator {

    public boolean isThisDateValid(String dateToValidate, String dateFromat){

        if(dateToValidate == null){
            return false;
        }

        SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
        sdf.setLenient(false);

        try {

            //if not valid, it will throw ParseException
            Date date = sdf.parse(dateToValidate);
            System.out.println(date);

        } catch (ParseException e) {

            e.printStackTrace();
            return false;
        }

        return true;
    }

}

Par défaut,SimpleDateFormat.setLenient() est défini sur true, vous devez toujours le désactiver pour rendre votre validation de date plus stricte.

2. Test de l'unité

Tous les cas de tests unitaires sont réussis.

package com.example.test;

import org.junit.*;
import com.example.date.DateValidator;
import static org.junit.Assert.*;

public class DateValidatorTest {

    private DateValidator dateValidator;

    @Before
    public void init() {
        dateValidator = new DateValidator();
    }

    @Test
    public void testDateIsNull() {
        assertFalse(dateValidator.isThisDateValid(null, "dd/MM/yyyy"));
    }

    @Test
    public void testDayIsInvalid() {
        assertFalse(dateValidator.isThisDateValid("32/02/2012", "dd/MM/yyyy"));
    }

    @Test
    public void testMonthIsInvalid() {
        assertFalse(dateValidator.isThisDateValid("31/20/2012", "dd/MM/yyyy"));
    }

    @Test
    public void testYearIsInvalid() {
        assertFalse(dateValidator.isThisDateValid("31/20/19991", "dd/MM/yyyy"));
    }

    @Test
    public void testDateFormatIsInvalid() {
        assertFalse(dateValidator.isThisDateValid("2012/02/20", "dd/MM/yyyy"));
    }

    @Test
    public void testDateFeb29_2012() {
        assertTrue(dateValidator.isThisDateValid("29/02/2012", "dd/MM/yyyy"));
    }

    @Test
    public void testDateFeb29_2011() {
        assertFalse(dateValidator.isThisDateValid("29/02/2011", "dd/MM/yyyy"));
    }

    @Test
    public void testDateFeb28() {
        assertTrue(dateValidator.isThisDateValid("28/02/2011", "dd/MM/yyyy"));
    }

    @Test
    public void testDateIsValid_1() {
        assertTrue(dateValidator.isThisDateValid("31/01/2012", "dd/MM/yyyy"));
    }

    @Test
    public void testDateIsValid_2() {
        assertTrue(dateValidator.isThisDateValid("30/04/2012", "dd/MM/yyyy"));
    }

    @Test
    public void testDateIsValid_3() {
        assertTrue(dateValidator.isThisDateValid("31/05/2012", "dd/MM/yyyy"));
    }

}