Как проверить, если дата действительна в Java
В Java вы можете использовать классSimpleDateFormat, чтобы проверить, действительна ли указанная дата.
1. Пример 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; } }
По умолчанию дляSimpleDateFormat.setLenient()
установлено значение true, вы всегда должны выключать его, чтобы сделать проверку даты более строгой.
2. Модульный тест
Все юнит-тесты пройдены.
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")); } }