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