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")); } }